# include <iostream>
# include <cstring>
using namespace std;
int main()
{
char s[] ="ab\10\t\\cghi";
cout << sizeof(s) <<endl;
cout << strlen(s) <<endl;
return 0;
}
我觉得输出应该是11和10,但实际是10和9
ab\10\t\\cghi
a是一个字符 1
b是一个字符 2
\10是一个字符 3
\t是一个字符 4
\\是一个字符 5
c是一个字符 6
g是一个字符 7
h是一个字符 8
i是一个字符 9
sizeof计算的时候要多算一个\0,所以sizeof(s) 就是10
strlen(s)不包括\0,所以是9
\10是个8进制字符
\t是一个字符
\\是一个字符
abcghi是6个字符
所以一共9个字符。strlen为9
sizeof会增加一个字符串结束符0,所以是10
斜线是转义符,不占位置
a,b,\10,\t,\\,c,g,h,i,\0
刚好10个,\0不占长度,所以长度9
这里\10是同一个字符
总结一下吧,在C语言中有三种转义字符,它们是:一般转义字符、八进制转义字符和十六进制转义字符。八进制转义字符由反斜杠''和随后的1~3个八进制数字构成的字符序列。十六进制转义字符它是由反斜杠''和字母x(或X)及随后的1~2个十六进制数字构成的字符序列。例如,'\x30'、'\x41'、'\X61'
数字型转义字符的结果是ASCII码对应的字符
没有十进制转义字符
我是基础知识欠缺,看老师PPT出现了问题
感谢各位大佬愿意给我答复,耽误大家时间了!