プロが教える店舗&オフィスのセキュリティ対策術

基本的なことですが、
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 を使用しています。
よろしくお願いします。

A 回答 (3件)

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番目はありません。'フ'というのはゴミが出力されたのだと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>char str[5]は5つの領域をとるという意味
>よくわかりました。
>もう一度入門書を読み直します。
>いつの頃からか勘違いをしていました。

お礼日時:2004/04/05 22:41

>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]には何も定義されていないことになります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>char str[5]は5つの領域をとるという意味
>よくわかりました。
>もう一度入門書を読み直します。
>いつの頃からか勘違いをしていました。

お礼日時:2004/04/05 22:41

>for(int i=0;i<7;i++)


これは、
iが7になるまで、すなわち0~6の間繰り返されます。

>char str[6]="Hello"
これは要素数が6(0~5)の配列の宣言です。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

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

よくわかりました。
もう一度入門書を読み直します。
いつの頃からか勘違いをしていました。

お礼日時:2004/04/05 22:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!