|
|
1
7
标准规定定义文字字符串
编译器将文本放在只读内存段中。您可以输出程序集并观察它。如果您使用的是GCC,那么它是通过-s标志完成的。它将把字符串放在.rodata节中。 |
|
|
2
15
试图覆盖字符串文字是未定义的行为。C99§6.4.5/6:
附录J.2(未定义行为)对此进行了重申。 如果您这样做:
可以分配和初始化自动(堆栈)字符数组。在这种情况下,完全可以修改元素。 |
|
|
3
3
其他答案是从标准的角度来看的,但这里有 它崩溃了。 编译器通常将程序文本(尤其是字符串)放在只读内存中。操作系统将内存标记为只读,因此任何对其进行写入的尝试都将被捕获,在您的平台上,这就是分段错误所指示的;尝试在某些内存上执行不允许的操作。与坏内存使用相关的另一种崩溃是总线错误,它通常表示未对齐的内存访问或对根本没有映射的页的写入。对于C代码来说,这种差异几乎完全是学术上的(其他一些语言实现使用这些错误来帮助它们管理内存)。
请注意,将写入限制为只读与语言的官方语义无关。而你可能有一个
|
|
|
4
1
这意味着(本质上):
允许编译器
|
|
|
5
1
该值是无法修改的字符串文字,因为文字存储在只读内存中,请尝试p[]取而代之的是分割错误通常是由于指针的错误使用造成的。 |
|
|
6
0
字符串文字不可修改。。。
写作能力
|
|
|
MaPo · Linux,设置锁定ICMP_过滤器选项 1 年前 |
|
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 1 年前 |
|
|
Bobby · 复合字面值总是左值吗? 1 年前 |
|
9-Pin · C: 嵌套结构的堆栈内存分配 1 年前 |