C 字符串文字 "too big for character"

标签 c string literals

对于 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
!
  1. 在 VS 2k12、2k10、2k8 和 2k5 附带的 Microsoft C++ 编译器上测试
  2. 测试于 gcc 4.3.4 .

关于C 字符串文字 "too big for character",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13692200/

相关文章:

c - 如何写矩阵?它打印随机数

Java使用一个变量作为另一个变量

Java 等价于 Python 的 "Got value: %s"% 变量?

Python 将变量视为文字/原始字符串

java - 允许整数数字之间使用下划线的理由是什么?

在 C 中的 case/switch 语句中,无法重新启动到有限状态机中的初始情况

c++ - 为什么返回浮点值会改变它的值?

c - C 中的广度优先搜索代码,可能的堆栈溢出

algorithm - 修剪 <= 2 个字符的字符串

python - float() : 0. 000001 的无效文字,如何修复错误?