Ann*_*mus 4 c string memory-management
请考虑以下代码:
char* str = "Hello World";
memcpy(str, "Copy\0", 5);
Run Code Online (Sandbox Code Playgroud)
memcpy期间发生分段错误.但是,使用此代码:
char str[12];
memcpy(str, "Hello World\0", 12);
memcpy(str, "Copy\0", 5);
Run Code Online (Sandbox Code Playgroud)
该程序不会产生分段错误.
问题来自于在堆栈上分配内存而不是数据部分吗?
Mar*_*ers 11
在gcc中使用字符串文字时,该值将放在只读内存中,无法修改.试图修改它会导致未定义的行为.通常,当您尝试执行此操作时,您将在Linux上遇到分段错误.
第二个示例有效,因为您没有修改字符串文字,您正在修改存储在非只读变量中的副本.
| 归档时间: |
|
| 查看次数: |
10769 次 |
| 最近记录: |