C言語の基礎

char s[10] = "hello";
printf("%zu %zu\n", strlen(s), sizeof s);

文字列を入れた char の配列について、上のコードを実行したときの出力として、正しいものはどれか。

  1. A5 10
  2. B6 10
  3. C10 10
答えと解説を見る

正解:A. 5 10

C言語の文字列は、文字の並びの最後に終端の文字 '\0' を置いたものです。strlen は先頭から '\0' の手前までの文字数を数えるので、"hello" では5になります。sizeof s は配列 s 全体の大きさで、宣言した要素数の10バイトです(残りの要素には0が入ります)。char s[] = "hello"; のように要素数を省くと、'\0' を含めた6バイトの配列になります。

  • A. 正しい。strlen は終端の '\0' を数えずに5、sizeof は配列の10バイトです。
  • B. strlen は終端の '\0' を数えないので、6ではなく5です。
  • C. strlen は配列の大きさではなく、'\0' の手前までの文字数を返します。
この分野を解く 分野ページへ

C言語の基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

C言語の基礎のほかの問題

  1. 上の宣言の後に、ア「p = t;」、イ「*p = 'x';」、ウ「q = t;」、エ「*q = 'x';」のどれかを書く。コンパイルエラーになるものの組み合わせはどれか。
  2. 関数ポインタの配列を使った上のプログラムを実行したときの出力として、正しいものはどれか。
  3. fill と use は別に定義された関数とする。上の関数の問題点として、正しいものはどれか。
  4. 上の関数 make が返すポインタについて、正しいものはどれか。
  5. C言語で free(p); の直後に p = NULL; と書くことが勧められる理由として、最も適切なものはどれか。