C语言字符串反斜杠表示问题

在djbdns这个源码里看到以下的用法表示字符串,经研究\后面是8进制数,转换成16进制后正好符合协议定义,问题是

这种表示法,编译器怎么知道\后面几位是数值、几位以后是普通字符?

比如char *s ="\0\377"; //8进制37等于0x1F,8进制377等于0xFF

那么表示①s[0]=0;s[1]=0xFF还是②s[0]=0;s[1]=0x1F;s[2]='7' ?

[code]#define DNS_C_IN "\0\1"
#define DNS_C_ANY "\0\377"

#define DNS_T_A "\0\1"
#define DNS_T_NS "\0\2"
#define DNS_T_CNAME "\0\5"
#define DNS_T_SOA "\0\6"
#define DNS_T_PTR "\0\14"
#define DNS_T_HINFO "\0\15"
#define DNS_T_MX "\0\17"
#define DNS_T_TXT "\0\20"
#define DNS_T_RP "\0\21"
#define DNS_T_SIG "\0\30"
#define DNS_T_KEY "\0\31"
#define DNS_T_AAAA "\0\34"
#define DNS_T_AXFR "\0\374"
#define DNS_T_ANY "\0\377"[/code]

这些宏在协议里实际是以下意思

A=0x01, //指定计算机 IP 地址。
NS=0x02, //指定用于命名区域的 DNS 名称服务器。
MD=0x03, //指定邮件接收站(此类型已经过时了,使用MX代替)
MF=0x04, //指定邮件中转站(此类型已经过时了,使用MX代替)
CNAME=0x05, //指定用于别名的规范名称。
SOA=0x06, //指定用于 DNS 区域的“起始授权机构”。
MB=0x07, //指定邮箱域名。
MG=0x08, //指定邮件组成员。
MR=0x09, //指定邮件重命名域名。
NULL=0x0A, //指定空的资源记录
WKS=0x0B, //描述已知服务。
PTR=0x0C, //如果查询是 IP 地址,则指定计算机名;否则指定指向其它信息的指针。
HINFO=0x0D, //指定计算机 CPU 以及操作系统类型。
MINFO=0x0E, //指定邮箱或邮件列表信息。
MX=0x0F, //指定邮件交换器。
TXT=0x10, //指定文本信息。
AAAA=0x1c,//IPV6资源记录。
UINFO=0x64, //指定用户信息。
UID=0x65, //指定用户标识符。
GID=0x66, //指定组名的组标识符。
ANY=0xFF //指定所有数据类型。

"\"是转义符。

C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。

拥有转义字符的原因基本上是两点:

一、使用转义字符来表示字符集中定义的字符,比如ASCll里面的控制字符及回车换行等字符,这些字符都没有现成的文字代号。所以只能用转义字符来表示 。

二、某一些特定的字符在编辑语言中被定义为特殊用途的字符。这些字符由于被定义为特殊用途,它们失去了原有的意义。

扩展资料

八进制转义字符

八进制转义字符它是由反斜杠'/'和随后的1~3个八进制数字构成的字符序列。例如,'\60'、'\101'、'\141'分别表示字符'0'、'A'和'a'。

因为字符'0'、'A'和'a'的ASCII码的八进制值分别为60、101和141。字符集中的所有字符都可以用八进制转义字符表示。如果你愿意,可以在八进制数字前面加上一个0来表示八进制转移字符。

参考资料来源:百度百科—转义字符

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-10-22
很简单,如果要在字符串中表示反斜杠,而不被编译器理解为转义字符,只需要使用两个反斜杠即可,即\\。
第2个回答  推荐于2017-10-12

反斜杠表示转义字符。

所有的ASCII码都可以用“\”加数字来表示。而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符。

所有的转义字符和所对应的意义:

第3个回答  推荐于2017-10-08
这个你看下C语言标准就可以了
字符串里的八进制表示一般是用3个数字,0-7有效,最多3个数字也可以1个或2个。如果发现后面跟的不是有效数字,那么提前停止解析。所以\078就解释为\07和字符8。

所以"\0\377",第一个字节是\0,第二个字节是\377也就是0xff,第三个字节是\0本回答被提问者采纳

C语言字符串反斜杠表示问题
"\\"是转义符。C中定义了一些字母前加"\\"来表示常见的那些不能显示的ASCII字符,如\\0,\\t,\\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。拥有转义字符的原因基本上是两点:一、使用转义字符来表示字符集中定义的字符,比如ASCll里面的控制字符及回车换行等字符,这些字符都没...

为什么在c语言中反斜杠\\ n表示\\0?
在字符串中反斜杠符号是用\\\\来表示的\\的出现必定意味着转义,单个的\\符号是没有意义的 "\\\\\\065a,\\n"应该这样解析:\\\\ \\065 a ,\\n 长度为5所以如果变成"\\\\065a,\\n"这样的话会这样解析:\\\\ 0 6 5 a ,\\n 长度为7 关于\\0:刚刚在C语言中测试了一下printf("hello\\0 world");输出结...

C语言源代码中行结尾的反斜杠有什么用?
反斜杠起到换行作用,用于宏定义和字符串换行。其中宏定义中使用居多。\\x0d\\x0a如果一行代码有很多元素,导致太长影响阅读,可以通过在结尾加\\的方式,实现换行,编译时会忽略\\及其后的换行符,当做一行处理。\\x0d\\x0a在宏定义中,要换行必须使用\\结尾。\\x0d\\x0a在字符串常量中,可以使用\\结尾...

C语言反斜杠问题
"\\"是转义符。C中定义了一些字母前加"\\"来表示常见的那些不能显示的ASCII字符,如\\0,\\t,\\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。拥有转义字符的原因基本上是两点:一、使用转义字符来表示字符集中定义的字符,比如ASCll里面的控制字符及回车换行等字符,这些字符都没...

C语言中的反斜杠b(\\b)是什么意思
C语言中的反斜杠b(\\b)是将输出的定位前移一个字符的意思(可以在输出中删除刚输出的一个字符)。例如:printf("abcde"); printf("\\bABCD\\n"); 后,实际的输出为abcdABCD(后输出的A把e覆盖了)。

菜鸟C语言请教,反斜杠的意义
反斜杠有两种意义:续行符。预处理时把行末的反斜杠和那个换行符一同去除。在字符和字符串字面量里引起转义字符,数值转义码和统一字符名称。在示例中,不需要转义也不影响字符串的含义。如果是字符,就需要对'进行转义:'\\'';同样的,在字符常量里可以不对"进行转义:'"'转义字符包括\\a \\b \\f ...

C语言中 "\\" 的作用是什么?
在C语言中,反斜杠(\\)是一个转义字符,用于表示一些特殊字符或者字符序列。下面是一些常见的用法:1. 转义字符:反斜杠可以将后面的字符转义为特殊字符,例如:- \\n:换行符 - \\t:制表符 - \\r:回车符 - \\b:退格符- \\':单引号- \\":双引号- \\\\:反斜杠本身2. 字符串转义:反斜杠可以用于将字符串分为多行...

C语言"\\"什么意思
反斜杠\\可以表示转义字符,也可以表示文件路径。如:c:\\qq.txt使用 \\表示文件路径。更多的是用来表示转义字符,也就是经常使用在printf与scanf里面的格式控制符:c 字符 d 十进制整数 e 浮点数,指数e的形式 %s 字符串 E 浮点数,指数E的形式 %u 无符号十进制整数 f 浮点数,小数点...

c语言中的反斜杠问题ch='\\'
A. ch='\\'错误 单个\\是转义符号 下面都是正确的:B. ch=62+3 C. ch=NULL D. ch='\\xaa' \\x**:16进制表示字符,其中*就是0-9a-fA-F E. ch='\\023' \\***:8进制表示字符,其中*就是0-7,常用的'\\0'就是八进制

c 两个反斜杠 C语言
那个\\表示和后面的是接一起的,告诉程序下一行和上一行是一起的 比如你要输入一串很长的字符串,但是太长了一行放不下,或者不好看,你可以加个\\,然后直接回车换行。否则编译器默认不会连接起来的

相似回答