C 为什么这个程序会出现分段错误
如果我删除“错误行”,则不存在seg故障。这里有什么问题?您正在修改常量内存。即使您没有C 为什么这个程序会出现分段错误,c,segmentation-fault,C,Segmentation Fault,如果我删除“错误行”,则不存在seg故障。这里有什么问题?您正在修改常量内存。即使您没有const关键字,“1234”的类型是const char*什么指针*d和*p点是只读数据。(文本部分)。试图修改它会导致错误 您可以通过以下方式解决此问题: int main() { char *d = "1234"; char *p = d; p = p+2; p[0] = '2'; \\Error line printf("%s", p); } 或
const
关键字,“1234”
的类型是const char*
什么指针*d和*p点是只读数据。(文本部分)。试图修改它会导致错误
您可以通过以下方式解决此问题:
int main()
{
char *d = "1234";
char *p = d;
p = p+2;
p[0] = '2'; \\Error line
printf("%s", p);
}
或
您还应该为终端字符“\0”添加一个额外的空格。因此,当我使用“char d[]=“1234”时,数组d位于数据段中,对吗?C既不指定也不关心这些数据存储的位置。它确实指定不应修改常量数据。
/* Using character arrary, initialized it with "1234" */
char d[] = "1234";
/* Malloc heap memory for"1234" */
char *d = (char *)malloc(4);
strcpy(d, "1234");
// ...
free(d);