-5

文字配列の最後に「/o」を配置することになっていることはわかっていますが、「printf ("%s\n", kk);」と出力したい場合は 、それは「abcdepqrst」を与えます。なぜこうなった?これは私が実行しているプログラムです。

#include<stdio.h>
int main()
{

char kk[]={'a','b','c','d','e'};
char s[]="pqrst";

printf("%s\n",s);

printf("%s\n",kk);

}

出力:

pqrst

abcdepqrst

ここで配列 'kk' の前に配列 's' を宣言することにより、配列を宣言する順序を逆にしようとしましたが、ideone linkですが、それでも同じ出力が得られます。ideone がメモリを変数に割り当てる方法に関係があると思います。

#include<stdio.h>
int main()
{
char s[]="pqrst";
char kk[]={'a','b','c','d','e'};


printf("%s\n",s);

printf("%s\n",kk);

}

出力:

pqrst

abcdepqrst

4

3 に答える 3

4

kknull で終了していないためprintf、どこで停止するかわかりません。nullprintfで終了していない文字列での呼び出しは、未定義の動作(UB) です。つまり、プログラムから特定の結果を期待することはできません。あなたが見ているのは、UB の 1 つの徴候です。

null ターミネータを追加する必要があります。

char kk[]={'a','b','c','d','e', '\0'};
于 2015-08-27T20:18:50.820 に答える