为什么此代码会导致分段错误?
char *text = "foo";
strcpy(text, "");
据我了解,第一行分配一些内存(保存字符串“foo”)和text
指向分配的内存。第二行将空字符串复制到text
指向的位置。
这段代码可能没有多大意义,但为什么会失败呢?
答案 0 :(得分:5)
每当你有一个字符串文字(在你的情况下,“foo”)时,程序会将该值存储在内存的 readonly 部分。
strcpy
想要修改该值,但它只是readonly,因此是分段错误。
此外,text
应该是const char*
,而不是char*
。
答案 1 :(得分:0)
因为字符串文字(如"foo"
)只读。
答案 2 :(得分:0)
因为字符串文字存储在只读存储区域中。
因此,尝试修改foo
(在这种情况下使用strcpy
)是未定义的行为。