This question already has answers here:
Why do I get a segmentation fault when writing to a “char *s” initialized with a string literal, but not “char s[]”?
(17个答案)
2年前关闭。
为什么这段代码会崩溃?
在字符指针上使用
请给出同时引用数组和指针的正确方法。
“足够大”至少意味着
话虽这么说,您应该认真考虑使用
(17个答案)
2年前关闭。
为什么这段代码会崩溃?
在字符指针上使用
strcat
是非法的吗?#include <stdio.h>
#include <string.h>
int main()
{
char *s1 = "Hello, ";
char *s2 = "world!";
char *s3 = strcat(s1, s2);
printf("%s",s3);
return 0;
}
请给出同时引用数组和指针的正确方法。
最佳答案
问题是s1
指向字符串文字,而您尝试通过将s2
附加到字符串文字来对其进行修改。您不允许修改字符串文字。您需要创建一个字符数组并将两个字符串都复制到其中,如下所示:
char *s1 = "Hello, ";
char *s2 = "world!";
char s3[100] = ""; /* note that it must be large enough! */
strcat(s3, s1);
strcat(s3, s2);
printf("%s", s3);
“足够大”至少意味着
strlen(s1) + strlen(s2) + 1
。 + 1
用于说明空终止符。话虽这么说,您应该认真考虑使用
strncat
(或者,如果可用的话,可以说是更好但非标准的strlcat
),它们经过了边界检查,因此比strcat
更好。关于c - 为什么这段代码会崩溃? [复制],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2437318/
10-13 05:44