void fun(char p1[],char p2[]){
while ((p1++) != '\0');
while ((p2++) != '\0')
*(p1++)=*(p2++);
*p1='\0';
}
将两个字符串传入fun(),并实现字符串p2连接在字符串p1后面。运行一直无限循环。
所给出的答案中直接将第2个字符串的内容写到第一个字符串的后面,可能会导致覆盖其他数据,也可能会导致内存访问越界。一般都是先要根据整个2个字符串的长度malloc一块新的内存,然后再将字符串1和2分别strncpy到这块新分配的内存上去,得到拼接的字符串。
谢谢@leunggamciu,我自己没注意好。修改后发现还有两粗心的地方,现已更正完毕。
void fun(char *p1,char *p2){
while (*(p1++) != '\0');
p1--;
while (*(p2) != '\0')
*(p1++)=*(p2++);
*p1='\0';
}
*(p1++) != '\0';
*(p2++) != '\0';
不细心!
楼主这个函数,就算不无限循环了,也连接不成功吧。因为你将p2的字符放到了p1的起始处呀。
可以参考,已有的源码:
char *strcat(char *s, const char *append)
{
char *t = s;
for (; *t; ++t)
;
while ((*t++ = *append++) != '\0')
;
return (s);
}