在第一章,第k &ř引入了一個功能拷貝如下:K&R代碼示例混亂:複製串
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
複製到b
的工作,那就是爲什麼在副本while循環永遠終止,即使a
不含一個'\ 0'?爲什麼
a
發生了變異?
這是一個未定義的行爲。這意味着每一件事都是可能的,絕對是一切。 – nouney
爲什麼'int'和'char'之間的差異?如果你的編譯器沒有給你提供警告,那麼你的配置是錯誤的。 – Medinoc
我假設你修改了K&R例子來使用'char'來代替?否則,所有投注都將關閉,因爲您的代碼將複製4個字節的塊,導致seg.faults和未定義的行爲。 – Lundin