В качестве упражнения в указателях я сделал функцию конкатенации:Строка перемещается неожиданно в C
void
strcat(char *s, char *t)
{
while(*s)
s++;
while(*s++ = *t++);
}
, кажется, работает просто отлично:
main()
{
char *s = "Hello, ";
char *t = "world!";
strcat(s,t);
printf("%s\n", s);
return 0;
}
производит Hello, world!
, как ожидалось. Но случилось что-то нежелательное, напечатав строку t
баллов, чтобы дать orld!
. strcat
не может быть изменен t
. Вместо этого кажется, что строка перемещена; декремент t
после strcat, а затем его печать дает правильную строку.
Что перенесло строку? strcat
должно быть, но не знаю, в чем проблема.
Скомпилировано в версии tcc 0.9.26 (x86-64 Win64), если это имеет значение.
Обратите внимание, что имена, начинающиеся с 'str' и буквы, всегда зарезервированы для реализации, поэтому вы не должны называть свою новую функцию. –