字符常量:\ 000\xhh

maw*_*wia 10 c

任何人都可以解释字符常量\ 000和\ xhh的用法,即字符常量中的八进制数和十六进制数?

unw*_*ind 5

在 C 中,字符串以值为零 (0) 的字符结尾。这可以写成这样:

char zero = 0;
Run Code Online (Sandbox Code Playgroud)

但这在字符串中不起作用。字符串文字中使用了一种特殊的语法,其中反斜杠用作转义序列的介绍,其后是各种内容。

一个这样的序列是“反斜杠零”,它仅表示值为零的字符。因此,你可以这样写:

char hard[] = "this\0has embedded\0zero\0characters";
Run Code Online (Sandbox Code Playgroud)

另一个序列使用反斜杠后跟字母'x'和一个或两个十六进制数字来表示具有指定代码的字符。使用此语法,您可以编写零字节'\x0',例如。

编辑:重新阅读这个问题,也支持八进制中的此类常量,即八进制。它们使用反斜杠后跟数字零,就像八进制文字整数常量一样。'\00'因此是 的同义词'\0'

当您需要构造包含非打印字符或特殊控制字符的字符串时,这有时很有用。

还有一组单字符的“命名”特殊字符,例如'\n'换行符、'\t'制表符等。


Chr*_*fer 5

这些将用于在编辑器中编写其他不可打印的字符.对于标准字符,这将是各种控制字符,对于wchar,它可能是未在编辑器字体中表示的字符.

例如,这在Visual Studio 2005中编译:

    const wchar_t bom = L'\xfffe';     /* Unicode byte-order marker */
    const wchar_t hamza = L'\x0621';   /* Arabic Letter Hamza */
    const char start_of_text = '\002'; /* Start-of-text */
    const char end_of_text = '\003';   /* End-of-text */
Run Code Online (Sandbox Code Playgroud)

编辑:使用八进制字符文字有一个有趣的警告.八进制数字的长度可能不会超过三位数,这会人为地限制我们可以输入的字符.

例如:

        /* Letter schwa; capital unicode code point 0x018f (octal 0617)
         *               small unicode code point   0x0259 (octal 1131) 
         */
    const wchar_t Schwa2 = L'\x18f';    /* capital letter Schwa, correct */
    const wchar_t Schwa1 = L'\617';     /* capital letter Schwa, correct */
    const wchar_t schwa1 = L'\x259';    /* small letter schwa, correct */
    const wchar_t schwa2 = L'\1131';    /* letter K (octal 113), incorrect */
Run Code Online (Sandbox Code Playgroud)