1
char ch[2];
ch[0] = 'h';
ch[1] = '\0';

または私はただすることができます

char ch[1];
ch[0] = 'h';

どの「\0」がすでに暗示されているでしょうか?

私がこのようにしている理由は、私のプログラムにループがあり、このループでこの文字を絶えず変更し、より長い文字列に連結しているためです。

4

4 に答える 4

5

を割り当てるだけでch[0]は、にゼロは割り当てられませんch[1]。次のように、配列内の両方の文字を1行の文字列リテラルで初期化できます。

char ch[2] = "h";

これはに入れ'h'ch[0]終了ゼロはに入れch[1]ます。

于 2012-09-24T00:22:09.090 に答える
1

必要に応じて終了ヌル文字を省略できますが、のような終了ヌル文字を期待する関数を使用することはできませんstrlen

于 2012-09-24T00:22:29.257 に答える
0

この1文字の文字列を何度も使用する場合のオプションのひとつは、nullを1回だけ初期化することです。次に、最初の文字を変更するだけです。

char ch[2] = {0};
ch[0] = 'h';

2番目のケースでは、配列を宣言する必要はありません。

char ch = 'h';

しかし、それを文字列として使用することはできません。1文字の「配列」に暗黙のヌル文字はありません。

文字列の代わりに文字を文字列に追加できないのはなぜですか?strcatこれが何であるかというと、あなたは必要ありません...完了するまで単一の文字を追加し続け、それからnullを追加します。

char somestring[100];
char pos = 0;
while( ... ) {
    somestring[pos] = 'x';  /* or whatever */
    pos = pos + 1;
} 
somestring[pos] = 0;
于 2012-09-24T00:24:44.017 に答える
-1

ch文字列ではなくchar配列です。

'\0'コンパイラは、 ;を追加した場合にのみ文字列として認識できます。ただし、charの配列としては認識できません。

したがって、を追加する必要があります。次の'\0'ように実行できます。

int ind=0;
while(...)
{
    ch[ind++]='h';
}
ch[ind]='\0';
于 2012-09-24T00:35:18.893 に答える