【发布时间】:2012-09-27 12:49:39
【问题描述】:
可能重复:
Difference between char *str=“STRING” and char str[] = “STRING”?
我写了以下代码:
int main()
{
char *str = "hello";
str[0] = 'H';
printf("%s\n", str);
}
这给了我一个分段错误,我不明白为什么。
str 是 pointer to char 不是 const char。即使是这种情况,它也不应该给出如下程序的编译错误:
int main()
{
const char *str = "hello";
str[0] = 'H';
printf("%s\n", str);
}
它给出一个错误:assignment of read-only location *str。
编辑
如果我的代码将指针指向只读位置,我不应该得到编译错误吗?
【问题讨论】:
-
请使用搜索功能。如果您进行搜索,您会发现数百个完全相同的问题。
-
@Marlon 请在 stackoverflow 上粘贴重复问题的链接
-
指针不是只读的。它只是指向您的字符串在内存中的存储位置。声明字符串的方式之间存在细微差别,这会改变它的存储方式。
-
stackoverflow.com/questions/11098074/…, stackoverflow.com/questions/9460260/…, stackoverflow.com/questions/6958222/unknown-segmentation-fault, .................... "字符分段错误" "字符串分段错误",等等
-
“如果我的代码将指针指向只读位置,我不应该得到编译错误。”你所做的是一个完全有效的任务。编译器不知道的是,在标准系统中,常量字符串被放置在只读内存中。在嵌入式系统上,这可能会有所不同。