对于 MSVC 2010,我尝试在 C 或 C++ 模式下编译它(需要在这两种模式下都可以编译)和 这是行不通的。为什么?我认为并在文档中发现“\x”将接下来的两个字符作为十六进制字符而不是更多(使用\X 时为 4 个字符)。
我还了解到在 C 源代码中没有可移植的方法来使用 ASCII 之外的字符代码,那么我如何指定一些德语 ISO-8859-1 字符?
int main() {
char* x = "\xBCd"; // Why is this not char(188) + 'd'
}
// returns test.c(2) : error C2022: '3021' : too big for character
// and a warning with GCC
最佳答案
不幸的是,您偶然发现 \x
会读取最后一个看起来是十六进制的字符1,2,相反您需要打破它向上:
const char *x = "\xBC" "d"; /* const added to satisfy literal assignment probs */
考虑这个程序的输出:
/* wide.c */
#include <stdio.h>
int main(int argc, char **argv)
{
const char *x = "\x000000000000021";
return printf("%s\n", x);
}
编译执行:
C:\temp>cl /nologo wide.c
wide.c
C:\temp>wide
!
- 在 VS 2k12、2k10、2k8 和 2k5 附带的 Microsoft C++ 编译器上测试
- 测试于 gcc 4.3.4 .
关于C 字符串文字 "too big for character",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13692200/