Skip to content
On this page

C语言字符串一定在静态区吗


标签:clang/面试题  

题目

c
char *ptr = "abc";
ptr[0] = 'x';

以上代码能否通过编译?运行结果是什么?[^1]

解析

首先这段代码的通过是没有问题的,但是运行的时候可能发生段错误。

这是因为 "abc" 作为字符串常量,保存在进程静态区的 ro 段[^2] 。

但这不是必定的结果,在有些编译器可能把它保存在其他区,导致我们能够获取到 "xbc"

[^1]: 摘自李慧琴Linux编程 - fopen函数1视频:5. 02.fopen函数1_哔哩哔哩_bilibili [^2]: 程序的内存布局

Last updated: