В первой главе, К & R вводит функцию копирования следующим образом: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
работы, поэтому делает петлю в то время как в копии когда-либо прекращается, даже еслиa
не содержит a '\ 0'?Почему
a
мутировал?
Это неопределенное поведение. Это означает, что все возможно, абсолютно все. – nouney
Почему расхождение между 'int' и' char'? Если ваш компилятор не принимает вас за предупреждения, вы неправильно настроили его. – Medinoc
Я предполагаю, что вы изменили пример K & R вместо 'char' вместо этого? В противном случае все ставки будут отключены, так как ваш код будет копировать куски размером 4 байта, что приведет к seg.faults и неопределенному поведению. – Lundin