C String Literal“对于角色来说太大了”

时间:2012-12-03 21:39:18

标签: 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

1 个答案:

答案 0 :(得分:13)

不幸的是,你偶然发现\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上进行了测试。