1
#include <stdio.h>

int main(){

char array[2];
array[0] = 'q';
array[1] = 'a';
printf("%s",array);

return 0;
}

あなたが私に尋ねると、このコードは機能しないはずです。printf は array[2] を string のように出力しますが、string ではありません。私がそれを実行すると、完全に機能します。理由を説明できますか?

4

2 に答える 2

5

私がそれを実行すると、完全に機能します。

運が悪いだけです: あなたのコードは未定義の動作を示します。これは、printf%sパラメーターが null で終了していない文字シーケンスの最後から実行されるためです。

C の文字列は のシーケンスであり、ヌル ターミネータと呼ばれる、char値が の余分な文字が必要です。0未定義の動作なしでコードを機能させる方法を次に示します。

char array[3];
array[0] = 'q';
array[1] = 'a';
array[2] = '\0';
于 2012-12-16T01:37:15.850 に答える
3

C では、String文字配列と同じです。StringCのようなものはありません。

于 2012-12-16T01:34:06.807 に答える