我正在尝试The C programming Language by K&R
学习C The C programming Language by K&R
。 我正在尝试使用指针编写strcat()
程序。
char *strcat (char *s, char *t){ char *d; d = s; while(*s++); s--; while(*s++ = *t++); return d; } int main () { char *name1; char *name2; name1 = "stack" ; name2 = "overflow"; printf("%s %sn", name1, name2); printf("strcat out : %s", strcat(name1, name2)); return 0; }
但我得到的是输出
stack overflow Segmentation fault
为什么不起作用? 任何人都可以澄清这里的错误..
因为指针是指向文字的指针,并且不仅仅是那些读取目标不足以包含两个字符串。 对于至少string1
您可能希望使用至少足够大的数组来包含两个字符串(包括终结符)。 喜欢:
char string1[128] = "Stack";
要么
char string1[128]; strcpy(string1, "Stack");
程序尝试将字符追加到文字字符串"stack"
。 不要那样做; 创建一个足够大的字符数组来保存结果,将第一个字符串复制到数组中,然后strcat
其余的字符串。
哦,并将你的函数命名为strcat
以外的东西。 该名称已被使用。
在这一行:
while(*s++ = *t++);
你解引用s
指向char数组"stack"
的一个结尾。 这会导致segmentation fault
错误。
char *name1; char *name2; name1 = "stack" ; name2 = "overflow";
==>
char name1[20]; char name2[10]; memcpy(name1,"stack") ; memcpy(name2,"overflow");
以上就是c/c++开发分享使用指针编写strcat()时出错相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/518770.html