第 1 章で、K&R は関数 copy を次のように紹介します。
void copy(char to[], char from[]) {
/* copy from from[] to to[], assumes sufficient space */
int i = 0;
while ((to[i] = from[i]) != '\0') {
i++;
}
}
この関数を少しいじってみると、予想外の結果が得られました。プログラム例:
int main() {
char a[3] = {'h', 'a', '\n'};
char b[3];
printf("a: %s", a); // prints ha
copy(b, a);
printf("a: %s", a); // prints nothing
printf("b: %s", b); // prints ha
return 0;
}
今私の質問に:
からのコピーが機能する
a
のはなぜですか?「\0」が含まれていなくb
ても、コピーの while ループが終了するのはなぜですか?a
なぜ
a
突然変異するのですか?