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

可能重复:
为什么在写入字符串时会出现分段错误?

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

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

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

每当您将字符串文字指定给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); 

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

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

您无法修改字符串文字。