为什么这个程序没有给出预期的输出?

时间:2012-05-31 13:44:00

标签: c

  

可能重复:
  Why do I get a segmentation fault when writing to a string?

int main()
{
    char *c = "abc";
    *c = 'd';
    printf("%s",c);
    return 0;
}

当我尝试在C中运行该程序时,程序崩溃了......我想知道这里的错误是什么?

2 个答案:

答案 0 :(得分:3)

因为字符串文字abc实际上存储在进程的只读区域中,所以您不应该修改它。操作系统已将相应的页面标记为只读,并且在尝试写入时会出现运行时异常。

每当您将字符串文字指定给char指针时,始终将其限定为const以使编译器警告您此类问题:

const char *c = "abc";
*c = 'd'; // the compiler will complain

如果你真的想修改一个字符串文字(尽管不是直接修改它的副本),我建议使用strdup

char *c = strdup("abc");
*c = 'd'; // c is a copy of the literal and is stored on the heap
...
free(c);

答案 1 :(得分:1)

"abc"是一个字符串文字。

*c = 'd'试图修改该字符串文字。

您无法修改字符串文字。