int main()
{
char *d = "1234";
char *p = d;
p = p+2;
p[0] = '2'; \Error line
printf("%s", p);
}
如果我删除"错误行"行,则没有seg错误。这里有什么问题?
您正在修改常量内存。 即使您没有 const
关键字,"1234"
的类型也是 const char *
。
哪些指针 *d 和 *p 点是只读数据。(文本段(。尝试修改它会导致错误。
您可以通过以下方式修复它:
/* 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);
您还应该为终端字符"\0"添加一个额外的空格。