未知的转义序列

时间:2016-07-20 13:24:27

标签: c

我正在尝试printf一个显示温度表的字符串 printf("TABLE 24A (20\°C)");

度数符号是我定义为0xDF的常量,因此字符串如下所示:"TABLE 24A (20\xDF C)"

由于\xDFC之间的空格,这可行但看起来不正确。 如果我删除空格,编译器会发出警告十六进制转义序列超出范围

如果我将字符串修改为"TABLE 24A (20\xDF\C)",我会得到正确的结果,但编译器会发出警告未知的转义序列:'\ C'

有没有办法摆脱警告,但却失去了两个角色之间的空间?

2 个答案:

答案 0 :(得分:8)

您可以利用连续字符串文字自动连接的事实:

 printf("**TABLE 24A (20\xDF" "C)**");

这可以防止解析器为转义序列消耗更多字符而不是你想要的。

您也可以将字符作为参数传入,并使用%c格式说明符进行打印:

printf("**TABLE 24A (20%cC)**", '\xDF');

答案 1 :(得分:7)

\x转义序列消耗尽可能多的相邻十六进制数字。 C被解析为十六进制数字。

使用\x,您可以组合两个相邻的字符串文字。

printf("**TABLE 24A (20\xDF""C)**");

或使用\unnnn Unicode转义符,限制为四个十六进制字符。

printf("**TABLE 24A (20\u00DFC)**");

或八进制\nnn

printf("**TABLE 24A (20\337C)**");