C 字符串文字

标签 c string

我有一些关于字符串文字的基本问题。我尝试过一些类似的 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/

相关文章:

java - 为链表类的子字符串开发替换方法

c++ - 将包含十六进制值的字符串转换为c中的字符字节

c - 在 C 中,逻辑运算符是否在 || 的一侧结束是真的?

c - 开头的随机数组大小?

c - 下面的程序是尾递归吗?

c - Bison/Yacc : yyparse not declared in this scope

Java - 如何从绝对路径中获取文件名并删除其文件扩展名?

c# - 将字符串转换为日期 - C#

mysql - 如何使用 PHP 对 MYSQL 中的公司名称进行模糊匹配以实现自动完成?

c - 二叉搜索树显示 “Preorder” 、 “Inorder” 和 “Postorder”