ANSI X3.159-1989“編程語言 C”標準在“5.2.1.2 - 多位元組字符”一章中指出:
對于 [source and execution] 字符集,應滿足以下條件:
- 所有位為零的位元組應解釋為與移位狀態無關的空字符。
- 所有位為零的位元組不應出現在多位元組字符的第二個或后續位元組中。
這是否意味著對于翻譯和執行環境,下一條陳述句是正確的?:
- 對于每個不同的移位狀態,源字符集和執行字符集都可能有一個多位元組值,用于表示空字符。[想法:如果翻譯或執行環境可以在不同的移位狀態之間切換(可以不同用于表示字符的位元組數),那么它應該以某種方式檢測空字符 - 不僅僅是作為一個位元組的“空字符”來自基本字符集,但例如,對于特定移位狀態的兩位元組“空字符”。] PS這可能是對如何通過翻譯和執行環境在字串文字等中解釋字符值的誤解.
- 這些字符只能表示為第一個位元組設定為“0”的值[即所有位為零的第一個位元組],因此如何表示它有很多種:“FFFF 0000”、“ABCD 0000”和等等
- “空字符”僅在基本執行字符集中定義。下面參考的兩個規則都適用于擴展翻譯和執行字符集。因此,“空字符”的多位元組表示可以在翻譯和執行環境中,并且可以在源代碼中使用多位元組“空字符”而不使用轉義序列,而是直接在某些一種字面意思。
或者“空字符”只能表示為單個位元組值,并且它的唯一一個這樣的字符,由基本執行字符集定義?
uj5u.com熱心網友回復:
這是否意味著對于翻譯和執行環境,下一條陳述句是正確的?:
對于每個不同的移位狀態,源字符集和執行字符集都可能有一個多位元組值,用于表示空字符。
不,“空字符”是一個定義的術語:
所有位都設定為 0 的位元組,稱為空字符,應存在于基本執行字符集中 [...]
在第 5.2.1/2 段中的當前標準 (C17) 中,但相同的文本一直追溯到 C89。
問題中參考的規定的要點是,C 實作不必關心轉換狀態或擴展字符來識別空字符,并且使用空字符作為字串終止符不會導致截斷任何多位元組字符。
這些字符只能表示為第一個位元組設定為“0”的值[即所有位為零的第一個位元組],因此如何表示它有很多種:“FFFF 0000”、“ABCD 0000”和等等
不。同樣,出于語言規范的目的,“空字符”是一個定義的術語,表示值為 0 的位元組。正在討論的條款的重點是,在嘗試識別時,實作不需要考慮任何更廣泛的背景關系一個空字符。例如,字串函式strcpy()和strlen()不需要知道或關心關于字符編碼、移位狀態或多位元組字符的任何事情。他們只是通過空字符識別字串的結尾。
“空字符”僅在基本執行字符集中定義。
C規范不要求源字符集具有空字符,但您參考的文本說,如果它包含值為0的單位元組字符,那么對于C的目的,該字符是空字符。
下面參考的兩個規則都適用于擴展翻譯和執行字符集。
是的。
因此,“空字符”的多位元組表示可以在翻譯和執行環境中,[...]
不。同樣,空字符是值為 0 的位元組,無論字符集或編碼如何。
或者“空字符”只能表示為單個位元組值,并且它的唯一一個這樣的字符,由基本執行字符集定義?
源字符集中也可以有一個空字符,但這不是必需的。并且每個擴展字符集都嵌入了相應的基本字符集,因此從這個意義上說,每個擴展執行字符集都定義了空字符,擴展源字符集也可以這樣做。但是,在每個包含空字符的字符集中,該字符表示為一個值為 0 的位元組,并且在每個字符集中包含一個在任何字符表示中值為 0 的位元組,該位元組表示空字符。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/485439.html
下一篇:如何使用代碼為抽搐運動設定影片?
