printf我想用函数打印 10\xc2\xb0Celsius
通常我会这样做:
\n\nprintf("10\\xF8Celsius");\nRun Code Online (Sandbox Code Playgroud)\n\n其中 \\xF8 是度数符号的 ANSI 代码。问题是编译器获取 \\x 之后的所有十六进制字符并尝试转换为字符,基本上它获取\\F8Ce并尝试将其转换为字符。
我可以这样写:
\n\nprintf("10\\xF8 Celsius"); //see additional space\nRun Code Online (Sandbox Code Playgroud)\n\n但问题仍然存在。
\n\n如何告诉编译器我的十六进制代码在哪里结束?是否可以?
\n\n注意:我在 Windows 8.1 上使用 Visual Studio 2015 PRE 来观察这个问题(并不是说这个问题是特定于平台的,只是提一下)
\n十六进制转义序列没有字符限制,因此 - 由于解析器是贪婪的 - 它会抓取它可以获得的所有十六进制数字。C 规范摘录:
hexadecimal-escape-sequence:
\x hexadecimal-digit
hexadecimal-escape-sequence hexadecimal-digit
hexadecimal-digit: one of
0 1 2 3 4 5 6 7 8 9
a b c d e f
A B C D E F
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题 - 将您的字符串分成两个连续的字符串,然后将它们连接起来(在翻译阶段#6;-)。所以而不是:
printf("10\xF8Celsius");
Run Code Online (Sandbox Code Playgroud)
使用:
printf("10\xF8" "Celsius");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2166 次 |
| 最近记录: |