1

私の C++ の本には、C-Style Character Strings という 2 ページのセクションがあります (C++ プログラマーは C スタイルの文字列を使用すべきではないと 2 度言われているので、ほとんど無意味に思えます) が、私が混乱していることが 1 つあります。違いは何ですか:

char ca[] = {'C', 'a', 't'};

char ca[] = "cat";

最初のものについては、C スタイルの文字列は null で終了する必要があるため、「悲惨な」結果になる可能性があると述べています。しかし、2 番目のものも c スタイルの文字列ではありませんか? 「cat\0」などと入力する必要がないのはなぜですか? それもまた「悲惨な結果」につながるのではないか。

4

4 に答える 4

5

2番目は次と同等です

char ca[] = {'c', 'a', 't', '\0'}

最初の例には存在しない終了NUL文字に注意してください。

文字列リテラルで配列を初期化するときに"cat\0"、コンパイラが自動的に文字を追加するため、入力する必要はありません。NULそれらがルールです。

于 2013-09-16T04:39:50.647 に答える
1

多くのアルゴリズムが null を探すため、C スタイルの文字列は null で終了する必要があります。null が見つからない場合、文字列のコピーなどは終了しない可能性があります。

char ca[] = "cat";
char ca2[] = {'C', 'a', 't', '\0'};

caca2同一です。「cat\0」などと入力する必要がない理由については、言語メーカーが二重引用符で囲まれた文字列の意味を暗黙的に null を含むように定義した非常に一般的なパターンであるためです。便利なものばかり

于 2013-09-16T04:41:20.847 に答える
1

C スタイルの文字列は null で終了するため\0、配列の末尾に1 つのパディングがあります。

char ca[] = "cat";

以下と同じです:

char ca[] = {'c', 'a', 't', '\0'};

この配列には 4 つの要素があることに注意してください。

于 2013-09-16T04:41:30.850 に答える