我有一些关于字符串文字的基本问题。我尝试过一些类似的 SO 问题,但我仍然不明白 :(。
例如,如果我们有以下程序:
char firstlit[] = "First Literal";
int main()
{
char secondlit[] = "Second Literal";
}
这样初始化的字符串是字面量吗?如果是这样,我们怎么能修改它们的值呢?是否未定义更改它们的值?
它们都存储在数据部分吗?我在某处看到代码段中可以保存一些数据,这是为什么呢?
它们之间的唯一区别是secondlit包含指向字符串初始化地址的指针,但是我们只能在main中使用这个变量,而firSTLit我们可以在整个文件(全局)中使用? 另一个问题:
char *ptr = "Hello";
char secondptr[] = "Hello";
它们的存储方式实际上是一样的吗?用于字符串文字的更好方法是什么? 抱歉问了这么多问题。 谢谢。
最佳答案
您的问题中只有一个字符串文字对象:
char *ptr = "Hello"; // The array containing Hello\0
所有其他的都只是数组的初始值设定项,并且无法保证它们是如何存储的。
- 字符串文字和常量复合文字可以共享空间并且是不可变的。
- 尽管如此,由于历史原因,字符串文字的类型为
char[]
。 - 并且不能保证它们存储在哪个可执行部分中,甚至不能保证有任何可执行部分。
- 如果您忽视它们不可变的事实,也无法保证会发生什么。自行承担风险。
关于C 字符串文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28075225/