#include <stdio.h>
int main(){
char array[2];
array[0] = 'q';
array[1] = 'a';
printf("%s",array);
return 0;
}
あなたが私に尋ねると、このコードは機能しないはずです。printf は array[2] を string のように出力しますが、string ではありません。私がそれを実行すると、完全に機能します。理由を説明できますか?
#include <stdio.h>
int main(){
char array[2];
array[0] = 'q';
array[1] = 'a';
printf("%s",array);
return 0;
}
あなたが私に尋ねると、このコードは機能しないはずです。printf は array[2] を string のように出力しますが、string ではありません。私がそれを実行すると、完全に機能します。理由を説明できますか?
私がそれを実行すると、完全に機能します。
運が悪いだけです: あなたのコードは未定義の動作を示します。これは、printf
の%s
パラメーターが null で終了していない文字シーケンスの最後から実行されるためです。
C の文字列は のシーケンスであり、ヌル ターミネータと呼ばれる、char
値が の余分な文字が必要です。0
未定義の動作なしでコードを機能させる方法を次に示します。
char array[3];
array[0] = 'q';
array[1] = 'a';
array[2] = '\0';
C では、String
文字配列と同じです。String
Cのようなものはありません。