1
char str[]="Hello";

これは文字列に6バイトを割り当てますが、私が書く場合

char *str = "Hello";

これは1文字を格納することだけを目的としていたため、データを上書きしますか?だから私が求めているのは、文字列を宣言するが初期化しない場合(char str [12];)、ここで12バイトが予約されるのか、それとも初期化するのかということです。そして、それらがここで初期化される場合、それは次のことを意味します:

char *str;

1バイトだけが予約されますが、文字列を指すようにすると、その範囲を超えてデータが上書きされませんか?

4

2 に答える 2

2
char *str;

コンテンツ用のデータは予約されません。これは、メモリアドレスを保持するサイズのポインタです。

char *str = "Hello";

の6バイトは{ 'H', 'e', 'l', 'l', 'o', 0 }、コンパイラによってすでにどこかに格納されています。これで、アドレスを保持する(それを指す)変数を作成しています。文字列の内容はコピーされません。

于 2012-05-24T18:10:10.297 に答える
0
char str[]="Hello";

あなたはその権利を持っています、それは6char秒の配列です

char *str = "Hello";

これは文字列リテラルへのポインタです。どこかに6charの配列があり、変数strはそれを指しているだけです。

char *str;

これは何も予約せず、不確定な場所を指すポインタです。文字列を指すようにすると、char別の場所にあるsの配列を指すようになり、コピーは含まれません。

于 2012-05-24T18:11:13.087 に答える