ZHCUAU3J January 2018 – March 2024
在 C 语言中,字符串常量用于下述方式之一:
char s[] = "abc";
当字符串用作初始化值时,其被简单地视为初始化数组;每个字符都是一个单独的初始化值。有关初始化的更多信息,请参阅节 6.7。
strcpy (s, "abc");
在表达式中使用字符串时,字符串本身是在 .const:string 段中定义的,并带有指向该字符串的唯一标签;编译器明确添加终止 0 字节。
字符串标签的形式为 $C$SLn,其中 $C$ 是编译器生成的符号前缀,n 是编译器分配的数字,以使标签唯一。该数字从 0 开始,每定义一个字符串就增加 1。
标签 $C$SLn 表示字符串常量的地址。编译器使用此标签引用字符串表达式。
由于字符串存储在 .const 段中(可能在 ROM 中)并被共享,因此对于程序来说修改字符串常量是一种不好的做法。以下代码是错误使用字符串的示例:
const char *a = "abc"
a[1] = 'x'; /* Incorrect! undefined behavior */