バグ検出ドリル(14)タイポグリセミア現象もびっくり、恐るべきは思い込み山浦恒央の“くみこみ”な話(114)(2/3 ページ)

» 2019年01月28日 10時00分 公開

3.今回の問題

問題文:A君は、学校の宿題で配列str1に代入した文字列の文字数を表示するプログラムを作成した(リスト1)。文字数のカウントには、sizeof関数を使用し、配列のヌル文字手前までを取得し、表示することにしている。A君の想定では、以下のようになるはずだが、うまくいかない(リスト2)。「char str1[5] = {'a','b','c','d','\0'};」と宣言しているはずなのに、実行結果が「count = 4」とならず、「count = 5」となる。上記の情報から、A君が期待する結果となるように修正せよ。

/*
	文字数表示プログラム
	CountString.c
	仕様: 文字列str1に文字を代入し、文字数を表示する。
*/
#include <stdio.h>
int main(){
	// 変数宣言
	int count = 0;
	char str1[5] = {'a','b','c','d','\0'};
	
	// 文字数を取得
	count = sizeof(str1);
	
	// 文字数を表示
	printf("count = %d\n", count);
	return 0;
}
リスト1 文字数表示プログラム(CountString.c)
count = 5
リスト2 実行結果

Copyright © ITmedia, Inc. All Rights Reserved.