C言語での質問です。


参考書を参考に
以下の例文を実行したところ…

#include <stdio.h>
#include <string.h>

int main(void){

char str[100];
printf("格納可能な文字数は%dです\n", sizeof(str) / sizeof(char) - 1);

return 0;
}

出力されるのは 「格納可能な文字数は99です」と出力されます。
これって、本当に99文字入るということでしょうか?…
それともこの例文が間違えているのでしょうか?

でも、strの配列は、100個です。終了の\0が最後に入るとしても
str[0]、str[1]…str[99]と数えていくと、100です。
str[100]自体、101個のものを入れることができるのではないかと
思っています。

何か勘違いをしているのでしょうか?
よろしくお願いします。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2012/02/15 10:22:46
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:hissssa No.1

回答回数428ベストアンサー獲得回数129

ポイント100pt

配列の宣言で使える有効範囲の認識が間違っています。
char str[100] の宣言で使える範囲は、str[0]~str[99]までです。

即ち、str[100]は使えないので、この配列に格納できるcharの個数は100個までであり、最後の\0の分を差し引いて使用可能な文字は99個までということになります。

  • id:unagi22
    C言語懐かしいな
    今は使ってないから忘れた
    これを覚えると面白い事になる

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません