c语言转义字符的问题

img


为什么D对呢不是八进制是0开头的数吗这个代表什么意思呢好疑惑A时0吗

\后面如果什么都不跟,是10进制数,那么\2就是ascii码是2的意思,当然实际上2可能并不对应任何可见字符,只是说它是个合法的表达
\后面跟0表示8进制
\后面跟x表示16进制
那么一个char只能存-128到127之间的数字,无符号数的话就对应0-255
10进制就只能输入0-255,超过就错了
16进制就是0x00-0xff
8进制就是000-0377

八进制打头0可以省略...\02和\2是一样的,对应ascii stx

img


char a = '\61';  //字符1
char b = '\141';  //字符a
char c = '\x31';  //字符1
char d = '\x61';  //字符a
char *str1 = "\x31\x32\x33\x61\x62\x63";  //字符串"123abc"
char *str2 = "\61\62\63\141\142\143";  //字符串"123abc"
char *str3 = "The string is: \61\62\63\x61\x62\x63"  //混用八进制和十六进制形式

转义字符以\或者\x开头,以\开头表示后跟八进制形式的编码值,以\x开头表示后跟十六进制形式的编码值。对于转义字符来说,只能使用八进制或者十六进制。
转义字符既可以用于单个字符,也可以用于字符串,并且一个字符串中可以同时使用八进制形式和十六进制形式。

#include <stdio.h>
int main(){
    puts("\x68\164\164\x70://c.biancheng.\x6e\145\x74");
    return 0;
}

转义字符的初衷是用于 ASCII 编码,所以它的取值范围有限:
八进制形式的转义字符最多后跟三个数字,也即\ddd,最大取值是\177;
十六进制形式的转义字符最多后跟两个数字,也即\xdd,最大取值是\7f。

超出范围的转义字符的行为是未定义的,有的编译器会将编码值直接输出,有的编译器会报错。

img


单引号、双引号、反斜杠是特殊的字符,不能直接表示:
单引号是字符类型的开头和结尾,要使用'表示,也即''';
双引号是字符串的开头和结尾,要使用"表示,也即"abc"123";
反斜杠是转义字符的开头,要使用\表示,也即'\',或者"abc\123"。