首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么字符数组在C++中接受非ASCII字符?

为什么字符数组在C++中接受非ASCII字符?
EN

Stack Overflow用户
提问于 2018-01-12 06:54:20
回答 1查看 1.2K关注 0票数 5

所以,我想要能够在我的C++程序中使用汉字,我需要使用某种类型,以保存这些字符超出ASCII的范围。

但是,我试着运行以下代码,并且成功了。

代码语言:javascript
复制
    #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字符?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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编码。

代码语言:javascript
复制
std::string msg = u8"你爱我"; 
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48221040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档