簡體   English   中英

為什么字符數組在C ++中接受非ASCII字符?

[英]Why do character arrays accept non ASCII characters in C++?

所以,我希望能夠在我的C ++程序中使用中文字符,並且我需要使用某種類型來保存超出ASCII范圍的字符。

但是,我嘗試運行以下代碼,它工作正常。

    #include <iostream>

    int main() {
      char snet[4];
      snet[0] = '你';
      snet[1] = '愛';
      snet[2] = '我';
      std::cout << snet << std::endl;
      int conv = static_cast<int>(snet[0]);
      std::cout << conv << std::endl; // -96
    }

這沒有意義,因為因為C ++中的sizeof(char) ,g ++編譯器的計算結果為1,但中文字符不能用單個字節表示。

為什么這里的中文字符被允許被置於char類型中?

在C ++中應該使用什么類型來容納中文字符或非ASCII字符?

使用-Wall標志編譯代碼時,您將看到如下警告:

警告:隱式常量轉換溢出[-Woverflow] snet [2] ='我';

警告:多字符字符常量[-Wmultichar] snet 1 ='愛';

在調試模式下的Visual C ++,給出以下警告:

c:\\ users \\ you \\ temp.cpp(9):警告C4566:由通用字符名'\\ u4F60'表示的字符無法在當前代碼頁中表示(1252)

窗簾下發生的事情是你的兩個字節的漢字被隱式轉換為一個字符。 轉換溢出,因此當您在控制台中打印時,您會看到負值或奇怪的東西。

為什么這里的中文字符被允許被置於char類型中?

您可以,但不應該,您可以定義char c = 1000000;

在C ++中應該使用什么類型來容納中文字符或非ASCII字符?

如果要存儲中文字符並且可以使用C ++ 11,請使用std :: string( 實例 )進行UTF-8編碼。

std::string msg = u8"你愛我"; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM