字符串常量保存在哪个段?
对于字符串常量保存的地方一直有点疑惑。网上搜的说是放在进程的数据段,那就应该是跟全局变量放在一起。那为什么全局变量值可以修改,而字符串常量不可修改?编译器是怎样区分全局变量和字符串常量的,怎么保证字符串常量不可修改?
[解决办法]
我昨天也想过这个问题 数据段是不止一个段的 例如汇编中.data .const
[解决办法]
.rdata
[解决办法]
c语言中叫字符串字面量吧 与c++的字符串常量的叫法不同
C/C++ 中对象的生存期按照其存储性质可分为三类:静态存储期(static storage duration)、自动存储期(automatic storage duration)以及动态存储期(dynamic storage duration)。相应地,对象可根据存储期性质分为静态对象、自动对象和动态对象三种。
字符串字面量是静态对象,所以在程序运行期间会一直存在。
修改字符串字面量的行为是无定义的
下面的操作都试图修改字符串字面量中的第一个字符从而改变字符串字面量,所以其结果是无定义(Undefined)的:
”hello”[0] = ‘A’; /* Undefined */
char* p = “hello”; *p = ‘A’; /* Undefined */
使用了无定义行为的程序是错误的;避免在程序中出现无定义行为是程序员的责任。
[解决办法]