2012-05-31 227 views

回答

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); 
+0

“char *'指针”将是一个char **。 –

+0

@Samuel:正确:-) –

1

​​是一个字符串文字。

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

您不能修改字符串文字。

+0

请注意,在某些平台上,您可以修改字符串文字。 –

+0

@WilliamPursell:试图修改字符串文字会导致未定义的行为。即使它不会在某个平台上崩溃,也会导致其他错误(例如更改不同的字符串)。 – interjay

+0

@WilliamPursell:如果你想让你的程序展现出定义好的行为,你就不能这样做。 –

相关问题