作为指针练习,我做了一个字符串连接函数:
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
。相反,似乎字符串已经移动了;在 strcat 之后递减t
然后打印它会给出正确的字符串。
是什么移动了字符串?strcat
必须是它,但不知道它有什么问题。
如果重要,在 tcc 版本 0.9.26 (x86-64 Win64) 中编译。