我在维基百科上读到了这个
int main(void)
{
char *s = "hello world";
*s = 'H';
}
当包含此代码的程序被编译时,字符串“hello world”被放置在程序可执行文件中标记为只读的部分中;加载后,操作系统将其与其他字符串和常量数据一起放置在内存的只读段中。执行时,变量 s 被设置为指向字符串的位置,并尝试通过该变量将 H 字符写入内存,从而导致分段错误**
我不知道为什么该字符串被放置在只读段中。请有人可以解释一下。
字符串文字存储在只读内存中,这就是它的工作原理。您的代码使用初始化为指向存储字符串文字的内存的指针,因此您无法有效地修改该内存。
要获取可修改内存中的字符串,请执行以下操作:
char s[] = "hello world";
那么就可以了,因为现在您只是使用常量字符串来初始化非常量数组。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)