[英]Error while writing strcat() using pointers
我正在尝试使用The C programming Language by K&R
学习C。 我正在尝试使用指针编写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 %s\n", 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");
在这一行:
while(*s++ = *t++);
您取消引用s
,它指向char数组"stack"
的最后一位。 这会导致segmentation fault
错误。
该程序尝试将字符追加到文字字符串"stack"
。 不要那样做 创建一个足以容纳结果的字符数组,将第一个字符串复制到该数组中,然后strcat
其余字符串。
哦,给您的函数命名,而不是strcat
。 该名称已被使用。
char *name1;
char *name2;
name1 = "stack" ;
name2 = "overflow";
==>
char name1[20];
char name2[10];
memcpy(name1,"stack") ;
memcpy(name2,"overflow");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.