私はいつも変更する必要があるので、私はポインタを使用していないので、私はコードを実行するたびに私は奇妙な動作を取得する文字列が必要なので、 31回目の繰り返し。言い換えればランダムな文字が奇妙に定義された動作
コード
int i = 0;
char name[100];
srand(getpid());
while(i<100) {
name[i] += (char)'A'+(rand()%26);
printf("%d strlen\n", i+1);
printf("%s\n", name);
printf("/////\n");
i++;
}
出力
/////
30 strlen
IKXVKZOLKHLTKBFFTUZCYXHYVEBZOY
/////
31 strlen
IKXVKZOLKHLTKBFFTUZCYXHYVEBZOYJ
/////
32 strlen
IKXVKZOLKHLTKBFFTUZCYXHYVEBZOYJWttime
/////
33 strlen
IKXVKZOLKHLTKBFFTUZCYXHYVEBZOYJW�time
/////
34 strlen
IKXVKZOLKHLTKBFFTUZCYXHYVEBZOYJW��ime
/////
35 strlen
IKXVKZOLKHLTKBFFTUZCYXHYVEBZOYJW���me
/////
36 strlen
IKXVKZOLKHLTKBFFTUZCYXHYVEBZOYJW����e
/////
37 strlen
IKXVKZOLKHLTKBFFTUZCYXHYVEBZOYJW�����
それは常にttime
31日文字などを印刷した後、コードは、その単語の各文字を上書きし、私は、結果として疑問符を取得します。物事に行く
は、最終的な出力
100 strlen
IKXVKZOLKHLTKBFFTUZCYXHYVEBZOYJW�����K��ȶ������MKRLHALEV�SNNRVWNOEXUVQNJUHAEWN�W�YPMCW�N�PXHNT��0�
/////
これはなぜ起こるのでしょうか?でさらに悪化外観を得ますか
'name'のをやっている
をしているのではない '0'アウトゲームが始まる前に、その後、C-文字列として扱われます。悪名高い未定義の行動が再び襲います。 – alk
私は他の言語での経験があることを賭けています。 Cの文字列は奇妙ですが、予測可能です。 'string + = 'x''はあなたの考えをしません。 – usr2564301
@alkゲームが始まる前に0になっていないのはどういう意味ですか? –