【发布时间】:2015-10-21 18:30:06
【问题描述】:
我在查看strace 调用的输出时遇到了一些我以前从未见过的东西。示例输出如下(来自对recv 的调用,详细说明):
recv(13, "%\0\0\0\23\0\1\0\5\0\0\0\0\0\0\0\0\0\0\0\26\0\0\0\0\0\0\0\0\0\0\0\5\0\20\0\5", 37, 0)
而其他结果如下:
recv(10, "OK\n", 3, 0)
不管实际 recv 打算传达什么,我注意到发送的每个字符都被转义了。我认为这些转义字符可能与ASCII Table 以一对一的方式相关(即\10 相当于\n)。
所以,快速测试如下:
printf("Before newline \10 After newline);
给出以下结果:
Before newline After newline
然后我尝试以十进制形式打印字符本身的值:
printf("Value: %d", '\10');
给出结果:
Value: 8
所以,很自然,因为区别是两个,我试过了:
printf("Before newline \12 After newline);
生产:
Before newline
After newline
因此,这种格式的转义字符确实与具有“less 2”关系的 ascii 表相关。
为什么ascii表和转义字符有两个之差?
这样做有什么意义,为什么会这样?
这只是
strace的细微差别吗?
【问题讨论】:
-
经过多一点测试后,我注意到上面提到的两者之间没有“小于 2”的关系。下面的答案直接解释了这一点。