Appearance
题目
c
char *ptr = "abc";
ptr[0] = 'x';以上代码能否通过编译?运行结果是什么?[^1]
解析
首先这段代码的通过是没有问题的,但是运行的时候可能发生段错误。
这是因为 "abc" 作为字符串常量,保存在进程静态区的 ro 段[^2] 。
但这不是必定的结果,在有些编译器可能把它保存在其他区,导致我们能够获取到 "xbc"。
[^1]: 摘自李慧琴Linux编程 - fopen函数1视频:5. 02.fopen函数1_哔哩哔哩_bilibili [^2]: 程序的内存布局