所以,我想要能够在我的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
}这是没有意义的,就像sizeof(char)在C++中那样,因为g++编译器的计算结果是1,但是汉字不能用一个字节表示。
为什么这里的汉字被允许装在char字体里?
在C++中应该使用什么类型来容纳汉字或非ASCII字符?
发布于 2018-01-12 07:42:03
当您使用-Wall标志编译代码时,您将看到如下警告:
警告:隐式常量转换-Woverflow snet2 =‘我’中溢出; 警告:多字符常量-Wmultichar snet1 = '爱';
在调试模式下的Visual C++给出了以下警告:
c:\users\you\temp.cpp(9):警告C4566:由通用字符名称'\u4F60‘表示的字符不能在当前代码页(1252)中表示
在窗帘下面发生的事情是,您的两个字节汉字被隐式转换为一个字符。这种转换会溢出,因此当您在控制台中打印它时,您会看到一个负值或一些奇怪的东西。
为甚麽这里的中文字可以装在焦炭里呢?
你可以,但不应该,就像你可以定义char c = 1000000;一样
在C++中应该使用什么类型来容纳汉字或非ASCII字符?
如果您想存储汉字并且可以使用C++11,请使用std::string (实例化)进行UTF-8编码。
std::string msg = u8"你爱我"; https://stackoverflow.com/questions/48221040
复制相似问题