Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 以'\';然后是一个数字,例如'\234';什么意思?_C_Char_Escaping - Fatal编程技术网

C 以'\';然后是一个数字,例如'\234';什么意思?

C 以'\';然后是一个数字,例如'\234';什么意思?,c,char,escaping,C,Char,Escaping,我一直在查看应用程序的源代码,当我遇到这些字符时,例如'\233'、'\234'、'\235',当我打印它们时,会得到垃圾字符 这是一个转义序列,用于八进制值。语法是\nnn 您可以在中阅读有关转义序列的更多信息 垃圾被打印出来,因为八进制中的233是十进制中的155,234是156,235是157。它们不表示任何ascii字符。该符号是八进制转义序列,表示char文字(char常量) 引用C11,第§6.4.4.4章,字符常量 单引号”、双引号“、问号?、反斜杠\,以及 任意整数值可根据下表表

我一直在查看应用程序的源代码,当我遇到这些字符时,例如
'\233'、'\234'、'\235'
,当我打印它们时,会得到垃圾字符

这是一个转义序列,用于八进制值。语法是
\nnn

您可以在中阅读有关转义序列的更多信息

垃圾被打印出来,因为八进制中的233是十进制中的155,234是156,235是157。它们不表示任何ascii字符。

该符号是八进制转义序列,表示
char
文字(
char
常量)

引用
C11
,第§6.4.4.4章,字符常量

单引号
、双引号
、问号
、反斜杠
\
,以及 任意整数值可根据下表表示 顺序:


  • 八进制字符
    \octaldigits
关于价值观

八进制转义序列中紧跟反斜杠的八进制数字被视为一部分 对于整型字符常量或单个字符常量的单个字符的构造 宽字符表示宽字符常量。八进制整数so的数值 formed指定所需字符或宽字符的值


\233
是八进制代码为233的字符

十进制为2×82+3×8+3=155

含义取决于所使用的字符集。超过127的代码不在7位ASCII中定义

正如DevSolar所宣传的:

可能有帮助

它们是八进制转义序列s,用于表示字符常量或字符串文本中的特定字节值

C11,6.4.4.4字符常量

character-constant:
    ' c-char-sequence '
    L' c-char-sequence '
    u' c-char-sequence '
    U' c-char-sequence '

c-char-sequence:
    c-char
    c-char-sequence c-char

c-char:
    any member of the source character set except the single-quote ', backslash \, or new-line character
    escape-sequence

escape-sequence:
    simple-escape-sequence
    octal-escape-sequence
    hexadecimal-escape-sequence
    universal-character-name

octal-escape-sequence:
    \ octal-digit
    \ octal-digit octal-digit
    \ octal-digit octal-digit octal-digit
八进制转义序列定义为后跟一到三个八进制数字(0-7)的反斜杠

为避免将以下十进制数字解释为八进制序列的一部分,通常的做法是用前导零填充八进制转义序列。但与八进制整数常量相反,不需要前导零

注意,这种转义序列的语义取决于上下文。我可以写
“Fu\303\237”
,它的意思可能是
“Fuß”
(在UTF-8中)或
“Fuß”
(在CP-1252中),这取决于我假设字符串采用的编码方式。可移植的是,我不能直接在源代码中写入这两个字符串中的任何一个,因为对任何不在源字符集中的字符的解释(即,ASCII-7不带美元、带符号和反勾号)是实现定义的。虽然现在大多数编译器可以将字符串文本解释为UTF-8,但八进制转义序列是可移植的方式

FWIW,也有十六进制转义序列;但是它们并没有定义得那么好:它们贪婪地吞食尽可能多的“十六进制数字”,甚至超过了
字符
所能容纳的数量;因此,如果字符串文本中的下一个字符是
[0-9a-fA-F]
中的一个,那么在此之前您无法“终止”十六进制转义(1);这就是为什么有些人喜欢八进制序列

(1) :正如M.M指出的,您可以将字符串文本一分为二(
“\xAB”“CD”


至于各种字符值可以代表什么,在哪种编码中,我推荐一个好的代码表。我自己做了一个,因为我找不到任何现有的表,其中列出了我在一个页面中需要的所有信息。

在字符串中,您可以通过使用文字串联来“终止”,例如
“\xAB”CD“
@M.M:…这使它成为两个串联的字符串文本,一点也不利于可读性。”但是是的,如果你坚持使用十六进制转义,这是一个解决办法。我已经和八度音阶和好了。