Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用char*字符串但不与char字符串一起使用时出现分段错误[11]_C_Pointers_Segmentation Fault - Fatal编程技术网

使用char*字符串但不与char字符串一起使用时出现分段错误[11]

使用char*字符串但不与char字符串一起使用时出现分段错误[11],c,pointers,segmentation-fault,C,Pointers,Segmentation Fault,可能重复: 我试着运行以下两个代码,我发现file2.c有一个分段错误,但是file1.c没有任何错误。有人能解释一下以下代码之间的区别吗: 文件1.c #包括 int main() { int i; 字符字符串[11]={“HelloThere”}; 字符串[10]='\0'; 对于(i=0;i这是因为 char string[11] = {"HelloThere"}; 将字符串常量复制到可写内存中,而 char * string = "HelloThere"; 将其保留在只读内存中

可能重复:

我试着运行以下两个代码,我发现file2.c有一个分段错误,但是file1.c没有任何错误。有人能解释一下以下代码之间的区别吗:

文件1.c

#包括
int main()
{
int i;
字符字符串[11]={“HelloThere”};
字符串[10]='\0';

对于(i=0;i这是因为

char  string[11] = {"HelloThere"};
将字符串常量复制到可写内存中,而

char * string = "HelloThere";
将其保留在只读内存中。虽然写入可写内存是绝对正常的(duh!),但写入只读内存是未定义的行为,可能会触发崩溃

请注意,您不需要显式指定字符串的大小,除非您希望分配的内存超过字符串文字所需的内存:

char  string[] = {"HelloThere"}; // <<== The size is empty

charstring[]={“hellother”};//这是因为赋值

char  string[11] = {"HelloThere"};
将字符串常量复制到可写内存中,而

char * string = "HelloThere";
将其保留在只读内存中。虽然写入可写内存是绝对正常的(duh!),但写入只读内存是未定义的行为,可能会触发崩溃

请注意,您不需要显式指定字符串的大小,除非您希望分配的内存超过字符串文字所需的内存:

char  string[] = {"HelloThere"}; // <<== The size is empty
charstring[]={“hellother”};//
然后

是错误的-您正在尝试修改字符串文字,但无法修改。这会导致未定义的行为,因此任何情况都可能发生,包括崩溃

但是,

char sring[11] = "HelloThere";
创建一个自动数组(在手动之前复制其中字符串的内容),该数组是可写的,允许修改其元素

然后

是错误的-您正在尝试修改字符串文字,但无法修改。这会导致未定义的行为,因此任何情况都可能发生,包括崩溃

但是,

char sring[11] = "HelloThere";

创建一个自动数组(在动手之前复制其中字符串的内容),该数组是可写的,允许修改其元素。

这个问题重复了数百次。@Oli-我认为这个问题更好:也许最好的问题是“OP为什么不先搜索?”这个问题重复了数百次。@Oli-我认为这个问题更好:也许最好的问题是“为什么OP甚至懒得先搜索?”