可能重复:获取分段错误
为什么此代码会导致分段错误?
char *text = "foo"; strcpy(text, "");
据我所知,第一行分配一些内存(以保存字符串"foo")和 text 指向分配的内存 . 第二行将空字符串复制到 text 指向的位置 .
text
这段代码可能没有多大意义,但为什么它失败了?
每当你有一个字符串文字(在你的情况下,"foo"),程序将该值存储在内存的 readonly 部分 .
strcpy 想要修改该值,但它只是readonly,因此是分段错误 .
strcpy
此外, text 应该是 const char* ,而不是 char* .
const char*
char*
因为字符串文字(如 "foo" )是 read-only .
"foo"
因为字符串文字存储在内存的只读区域中 .
因此,尝试修改 foo (在这种情况下使用 strcpy )是 undefined behavior .
foo
3 回答
每当你有一个字符串文字(在你的情况下,"foo"),程序将该值存储在内存的 readonly 部分 .
strcpy
想要修改该值,但它只是readonly,因此是分段错误 .此外,
text
应该是const char*
,而不是char*
.因为字符串文字(如
"foo"
)是 read-only .因为字符串文字存储在内存的只读区域中 .
因此,尝试修改
foo
(在这种情况下使用strcpy
)是 undefined behavior .