char ch[2];
ch[0] = 'h';
ch[1] = '\0';
または私はただすることができます
char ch[1];
ch[0] = 'h';
どの「\0」がすでに暗示されているでしょうか?
私がこのようにしている理由は、私のプログラムにループがあり、このループでこの文字を絶えず変更し、より長い文字列に連結しているためです。
char ch[2];
ch[0] = 'h';
ch[1] = '\0';
または私はただすることができます
char ch[1];
ch[0] = 'h';
どの「\0」がすでに暗示されているでしょうか?
私がこのようにしている理由は、私のプログラムにループがあり、このループでこの文字を絶えず変更し、より長い文字列に連結しているためです。
を割り当てるだけでch[0]
は、にゼロは割り当てられませんch[1]
。次のように、配列内の両方の文字を1行の文字列リテラルで初期化できます。
char ch[2] = "h";
これはに入れ'h'
、ch[0]
終了ゼロはに入れch[1]
ます。
必要に応じて終了ヌル文字を省略できますが、のような終了ヌル文字を期待する関数を使用することはできませんstrlen
。
この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;
ch
文字列ではなくchar配列です。
'\0'
コンパイラは、 ;を追加した場合にのみ文字列として認識できます。ただし、charの配列としては認識できません。
したがって、を追加する必要があります。次の'\0'
ように実行できます。
int ind=0;
while(...)
{
ch[ind++]='h';
}
ch[ind]='\0';