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";當(dāng)字符串用作初始化值時(shí),其被簡(jiǎn)單地視為初始化數(shù)組;每個(gè)字符都是一個(gè)單獨(dú)的初始化值。有關(guān)初始化的更多信息,請(qǐng)參閱節(jié) 6.10。
strcpy (s, "abc");在表達(dá)式中使用字符串時(shí),字符串本身是在 .const 段中使用 .string 匯編器指令定義的,并帶有指向該字符串的唯一標(biāo)簽;包括終止 0 字節(jié)。例如,以下行定義了字符串 abc 和終止 0 字節(jié)(標(biāo)簽 SL5 指向該字符串):
.sect ".const"
SL5: .string "abc",0字符串標(biāo)簽的形式為 SLn,其中 n 是編譯器分配的數(shù)字,用于使標(biāo)簽唯一。該數(shù)字從 0 開始,每定義一個(gè)字符串就增加 1。源模塊中使用的所有字符串都在編譯后的匯編語言模塊的末尾定義。
標(biāo)簽 SLn 表示字符串常量的地址。編譯器使用此標(biāo)簽引用字符串表達(dá)式。
由于字符串存儲(chǔ)在 .const 段中(可能在 ROM 中)并被共享,因此對(duì)于程序來說修改字符串常量是一種不好的做法。以下代碼是錯(cuò)誤使用字符串的示例:
const char *a = "abc"
a[1] = 'x'; /* Incorrect! undefined behavior */