C 分段故障SIGSEGV取决于初始化方法
我编写了一个小函数C 分段故障SIGSEGV取决于初始化方法,c,segmentation-fault,C,Segmentation Fault,我编写了一个小函数foo,用于更改字符串 当我使用该功能时,有时会收到SIGSEGV故障。这取决于字符串的初始化方式。在调用函数main中,通过内存分配和调用strcpy初始化字符串。我可以正确地更改该字符串 另一个字符串(TestString2)在我声明变量时初始化。我不能修剪这根线,但得到了SIGSEGV故障 为什么会这样 #include <stdio.h> #include <stdlib.h> #include <string.h> void
foo
,用于更改字符串
当我使用该功能时,有时会收到SIGSEGV故障。这取决于字符串的初始化方式。在调用函数main
中,通过内存分配和调用strcpy
初始化字符串。我可以正确地更改该字符串
另一个字符串(TestString2
)在我声明变量时初始化。我不能修剪这根线,但得到了SIGSEGV故障
为什么会这样
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void foo(char *Expr)
{
*Expr = 'a';
}
int main()
{
char *TestString1;
char *TestString2 = "test ";
TestString1 = malloc (sizeof(char) * 100);
strcpy(TestString1, "test ");
foo(TestString1);
foo(TestString2);
return 0;
}
#包括
#包括
#包括
void foo(char*Expr)
{
*Expr='a';
}
int main()
{
char*TestString1;
char*TestString2=“测试”;
TestString1=malloc(sizeof(char)*100);
strcpy(TestString1,“测试”);
foo(TestString1);
foo(TestString2);
返回0;
}
在TestString2
的情况下,将其设置为字符串常量的地址。这些常量不能修改,通常位于内存的只读部分。因此,您调用了在本例中显示为崩溃的
TestString1
的大小写是有效的,因为它指向允许您更改的动态分配内存。C没有字符串类型。指针不是数组@xing,Re“TestString2指向字符串文字”,不,它指向字符串。字符串是表示字符串的源代码。