ZHCU876Z July 2001 – October 2023 SM320F28335-EP
在 C 语言中,字符串常量用于下述方式之一:
char s[] = "abc";
当字符串用作初始化值时,其被简单地视为初始化数组;每个字符都是一个单独的初始化值。更多有关初始化的信息,请参阅节 7.10。
strcpy (s, "abc");
在表达式中使用字符串时,字符串本身是在 .econst 或 .const(根据 ABI 而定)段中使用 .string 汇编器指令定义的,并带有指向该字符串的唯一标签;包括终止 0 字节。例如,以下行定义了字符串 abc 和终止 0 字节(标签 SL5 指向该字符串):
.sect ".econst"
SL5: .string "abc",0
字符串标签的形式为 SLn,其中 n 是编译器分配的数字,用于使标签唯一。该数字从 0 开始,每定义一个字符串就增加 1。源模块中使用的所有字符串都在编译后的汇编语言模块的末尾定义。
标签 SLn 表示字符串常量的地址。编译器使用此标签引用字符串表达式。
由于字符串存储在 econst 或 .const 段中(可能在 ROM 中)并被共享,因此对于程序来说修改字符串常量是一种不好的做法。以下代码是错误使用字符串的示例:
const char *a = "abc"
a[1] = 'x'; /* Incorrect! undefined behavior */