int main()
{
char buffer[] = "\x53est\x03t";
int i;
for(i=0;i <6;i++)
{printf("%c\n",buffer[i]);}
}
这样会有警告 [Warning] C:\Program Files\C-Free 4\temp\未命名1.c:4: warning: escape sequence out of range for character
但是输出还是
>
而为什么"\x53est\x03t"这个字符串会报:
Compiling...
test.cpp
E:\test\test.cpp(4) : error C2022: '1342' : too big for character
Error executing cl.exe.
test.exe - 1 error(s), 0 warning(s)
这样一个错误,也就是说这个时候编译器将\x53e进行了转义,根据这个道理,依次类推:
如果字符串是"\x53efst\x03t",编译器将\x53ef进行转义。
进一步可以推理:
如果是char b='\x53ef'也会出现上述类似的编译错误。
由此可以看出,VC的编译器对\xhh的转义其实不是说\x后面只有两位数进行转义,而是说\x后面紧挨着只要是"0123456789abcef"这些字符都要进行转义,也就是属于十六进制范围内的字符。
其他编译器未进行测试,可以测试gcc/g++的编译情况。