ZHCUAV8W january 1998 – march 2023 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , AM1705 , AM1707 , AM1802 , AM1806 , AM1808 , AM1810 , AM5K2E04 , OMAP-L132 , OMAP-L137 , OMAP-L138 , SM470R1B1M-HT , TMS470R1A288 , TMS470R1A384 , TMS470R1A64 , TMS470R1B1M , TMS470R1B512 , TMS470R1B768
在 C 語言中,字符串常量用于下述方式之一:
char s[] = "abc";當字符串用作初始化值時,其被簡單地視為初始化數(shù)組;每個字符都是一個單獨的初始化值。有關初始化的更多信息,請參閱節(jié) 6.10。
strcpy (s, "abc");在表達式中使用字符串時,字符串本身是在 .const 段中使用 .string 匯編器指令定義的,并帶有指向該字符串的唯一標簽;包括終止 0 字節(jié)。例如,以下行定義了字符串 abc 和終止 0 字節(jié)(標簽 SL5 指向該字符串):
.sect ".const"
SL5: .string "abc",0字符串標簽的形式為 SLn,其中 n 是編譯器分配的數(shù)字,用于使標簽唯一。該數(shù)字從 0 開始,每定義一個字符串就增加 1。源模塊中使用的所有字符串都在編譯后的匯編語言模塊的末尾定義。
標簽 SLn 表示字符串常量的地址。編譯器使用此標簽引用字符串表達式。
由于字符串存儲在 .const 段中(可能在 ROM 中)并被共享,因此對于程序來說修改字符串常量是一種不好的做法。以下代碼是錯誤使用字符串的示例:
const char *a = "abc"
a[1] = 'x'; /* Incorrect! undefined behavior */