gpt4 book ai didi

c - 静态C字符串分配问题

转载 作者:太空狗 更新时间:2023-10-29 15:14:28 24 4
gpt4 key购买 nike

考虑以下代码:

char* str = "Hello World";
memcpy(str, "Copy\0", 5);

memcpy 时发生段错误。但是,使用此代码:

char str[12];
memcpy(str, "Hello World\0", 12);
memcpy(str, "Copy\0", 5);

程序不会产生段错误。

问题是否来自分配堆栈上的内存而不是数据部分?

最佳答案

当您在 gcc 中使用字符串文字时,该值被放置在只读内存中并且不能被修改。试图修改它会导致未定义的行为。当您尝试执行此操作时,通常会在 Linux 上遇到段错误。

第二个示例之所以有效,是因为您没有修改字符串文字,而是修改了它的副本,该副本存储在非只读变量中。

关于c - 静态C字符串分配问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3843446/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com