0

'\0'誰かが私に、与えられた配列に文字を入れることができない理由を説明してもらえますか?

char a[]={'r','b'};

a[2]='\0';

上記のコードは、3番目のスロットにヌル文字を配置して、文字配列aを文字列に変換するべきではありません。

4

3 に答える 3

8

配列の境界を越えて書き込んでいます。2文字で配列を初期化する場合、最後の有効なインデックスは1であり、ではありません2

次のように、3つの項目で配列を初期化する必要があります。

char a[] = {'r', 'b', '\0'};

このバージョンを使用することもできます。

char a[] = "rb";

これにより、内部にゼロで終了する文字列を含む書き込み可能な配列が得られます。

于 2012-05-19T02:48:55.657 に答える
1

Cの文字列は文字の配列として実装され、null'\0'で終了します。と言うだけ char* a = "rb";です。(string.hを含めることを忘れないでください)

于 2012-05-19T02:51:01.303 に答える
0

TeoUltimusの答えは正しいですが、彼の場合のポインタ「a」は文字列リテラルを指していることに注意してください。これは、文字列を変更できないことを意味します。具体的には、コードのa[1] = 'c';コンパイル中にコードを実行するとエラーが発生します。char a[] = "ab"文字列内の個々の要素を変更する場合は、書き込みます。詳細については、https ://www.securecoding.cert.org/confluence/display/seccode/STR30-C.+Do+not+attempt+to+modify+string+literalsを参照してください。

于 2012-05-19T03:08:10.343 に答える