12

MSVC 2010では、これをCまたはC ++モード(両方でコンパイル可能である必要があります)でコンパイルしようとしましたが、機能しません。なんで?'\ x'は次の2文字を16進文字として受け取り、それ以上ではないことをドキュメントで考えて見つけました(\ 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
4

1 に答える 1

16

残念ながら、16進数の1,2\xのように見える最後の文字をすべて読み取るという事実に遭遇しました。代わりに、これを分割する必要があります。

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. gcc4.3.4でテスト済み
于 2012-12-03T21:47:48.317 に答える