使用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甚至懒得先搜索?”