• ベストアンサー
  • 暇なときにでも

char型配列について

  • 質問No.823935
  • 閲覧数890
  • ありがとう数3
  • 回答数3
基本的なことですが、
char str[5]="Hello";
--> str[0]='H' str[1]='e' str[2]='l' str[3]='l' str[4]='o' str[5]='\0'
では、ないのでしょうか?
エラーが出ます。
//error C2117: 'str' : 指定された配列には、初期化子が多すぎます。
char str[6]="Hello";
では、コンパイルできます。
----------------------------------
また、
#include<iostream>
using namespace std;
int main()
{
char str[6]="Hello";
cout << str << endl;
for(int i=0;i<7;i++)
{
cout << "i=" << str[i];
if(str[i]=='\0'){cout << " NULL" << endl;}
else{cout << endl;}
}
getchar();return 0;
}
-----------------------------------------------
とすると、
Hello
i=H
i=e
i=l
i=l
i=o
i= NULL <--ここで、NULLなら、
i=フ <--このぶんは、いらないと思うのですが、、、
となります。
str[6] i=6 は、何を意味するのでしょうか?
Visual C++ NET を使用しています。
よろしくお願いします。

質問者が選んだベストアンサー

  • 回答No.3
  • ベストアンサー

ベストアンサー率 55% (10/18)

char str[5]では5個のcharが確保されます。"Hello"ではH,e,l,l,oの5個と、最後の'\0'を含めて6個のcharが必要ですので、char str[5]="Hello"ではエラーとなります。また、i=6の場合の出力ですが、char str[6]では0番目から5番目までの6個のcharが確保されますので、6番目はありません。'フ'というのはゴミが出力されたのだと思います。
お礼コメント
noname#6117
回答ありがとうございます。

>char str[5]は5つの領域をとるという意味
>よくわかりました。
>もう一度入門書を読み直します。
>いつの頃からか勘違いをしていました。
投稿日時:2004/04/05 22:41

その他の回答 (全2件)

  • 回答No.2

ベストアンサー率 47% (11786/24626)

>str[6] i=6 は、何を意味するのでしょうか?

char str[5]は5つの領域をとるという意味ですのでstr[0」からstr[4]までの領域しか確保しません。
ですからstr[5」に入れたかったら0から5までの6つの領域を確保するためにchar str[6]にする必要があるかと思います。

char str[6]="Hello"; だったらstr[0]には何も定義されていないことになります。
お礼コメント
noname#6117
回答ありがとうございます。

>char str[5]は5つの領域をとるという意味
>よくわかりました。
>もう一度入門書を読み直します。
>いつの頃からか勘違いをしていました。
投稿日時:2004/04/05 22:41
  • 回答No.1

ベストアンサー率 42% (75/178)

>for(int i=0;i<7;i++)
これは、
iが7になるまで、すなわち0~6の間繰り返されます。

>char str[6]="Hello"
これは要素数が6(0~5)の配列の宣言です。
お礼コメント
noname#6117
回答ありがとうございます。

>char str[5]は5つの領域をとるという意味

よくわかりました。
もう一度入門書を読み直します。
いつの頃からか勘違いをしていました。
投稿日時:2004/04/05 22:40
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ