能帮我理解这个简单代码的输出吗?
const char str[10] = "55\01234";
printf("%s", str);
Run Code Online (Sandbox Code Playgroud)
输出是:
55
34
Run Code Online (Sandbox Code Playgroud)
mya*_*aut 17
\012是一个表示符号代码的转义序列octal:
012 = 10 = 0xa = LINE FEED (in ASCII)
Run Code Online (Sandbox Code Playgroud)
所以你的字符串看起来像55[LINE FEED]34.
LINE FEED在许多平台上,字符被解释为换行序列.这就是你在终端上看到两个字符串的原因.
\012是其他人已经说过的新的逃生序列.(正如chux绝对正确评论的那样,如果ASCII不是使用的字符集,那么可能会有所不同.但无论如何,它在这个表示法中是一个八进制数字.)
这是ISO/IEC 9899中针对c99所述的标准
对于:
6.4.4.4字符常量
[...]
3单引号',双引号',问号?,反斜杠\和任意整数值可根据下表的转义序列表示:
单引号'\'
双引号"\"
问号?\?
反斜杠
八进制字符\八进制数字
十六进制字符\ x十六进制数字
它受到的范围:
约束
9对于整数字符常量,八进制或十六进制转义序列的值应在unsigned char类型的可表示值范围内,对于宽字符常量,对应于wchar_t的无符号类型.