【发布时间】:2013-06-11 18:28:32
【问题描述】:
作为指针练习,我做了一个字符串连接函数:
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) 中编译。
【问题讨论】:
-
请注意,以
str和字母开头的名称始终保留用于实现,因此您不应将新函数命名为该名称。
标签: c pointers string-concatenation memory-address