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

2024-04-07

所以,我希望能够在我的 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 type?

C++ 中应该使用什么类型来存放汉字或非 ASCII 字符?


当您使用 -Wall 标志编译代码时,您将看到如下警告:

警告:隐式常量转换中溢出 [-Woverflow] snet[2] = '我';

警告:多字符字符常量 [-Wmultichar] 网络1 http://coliru.stacked-crooked.com/a/9a94db541143983e = '爱';

Visual C++ 在调试模式下,给出以下警告:

c:\users\you\temp.cpp(9): 警告 C4566: 通用字符名 '\u4F60' 表示的字符无法在当前代码页中表示 (1252)

幕后发生的事情是,您的两个字节中文字符被隐式转换为字符。该转换会溢出,因此当您在控制台中打印它时,您会看到负值或奇怪的东西。

为什么这里的汉字被允许存放在 char 类型中?

你可以,但你不应该,就像你定义的那样char c = 1000000;

C++ 中应该使用什么类型来存放汉字或非 ASCII 字符?

如果你想存储中文字符并且可以使用 C++11,请使用 std::string 进行 UTF-8 编码(活生生的例子 http://coliru.stacked-crooked.com/a/9a94db541143983e).

std::string msg = u8"你爱我"; 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 C++ 中的字符数组接受非 ASCII 字符? 的相关文章

  • 实体框架代码优先 - 在另一个文件中配置

    使用 Fluent API 将表到实体的映射分开的最佳方法是什么 以便它全部位于单独的类中 而不是内联在 OnModelCreating 方法中 我目前在做什么 public class FooContext DbContext prote
  • 在 Windows Phone 上启动 pdf 文件时出现 System.Runtime.InteropServices.COMException

    我正在尝试使用我之前在另一个应用程序上使用过的以下工作代码打开 pdf 文件 但这一次 当流程到达此行时 我收到 System Runtime InteropServices COMException Windows System Laun
  • 使用 C# 使用应用程序密码登录 Office 365 SMTP

    在我们的 Office 365 公司帐户中实施两步身份验证之前 我的 C WPF 程序已成功进行身份验证并发送邮件 我使用了 SmtpClient 库 但现在我必须找到另一个解决方案 因为它不再起作用 我找不到任何使用 O365 应用程序密
  • __FUNCTION__ 宏的 C# 版本

    有人对 C FUNCTION 宏的 C 版本有好的解决方案吗 编译器似乎不喜欢它 尝试使用这个代替 System Reflection MethodBase GetCurrentMethod Name C 没有 LINE or FUNCTI
  • 对数字进行向上和向下舍入 C++

    我试图让我的程序分别向上和向下舍入数字 例如 如果数字是3 6 我的程序应该四舍五入最接近的数字 4 如果该数字是3 4 它将向下舍入为 3 我尝试使用ceil库获取 3 个项目的平均值 results ceil marks1 marks2
  • C中有const吗?

    这个问题可能很幼稚 但是 有没有constC 中的关键字 从哪个版本开始 之间有任何语义和 或句法差异吗const在 C 和 C 中 C 和 C 之间在语法上没有差异const关键字 除了一个相当晦涩的关键字 在 C 中 自 C99 起 您
  • C#:使用 System.Text 和 System.Text.RegularExpressions 之间的区别

    在 ASP NET C 应用程序中 我注意到为了使用 Regex 和 StringBuilder 我必须将两者都放在 using System Text using System Text RegularExpressions 从简单的角度
  • 推送 Lua 表

    我已经创建了一个Lua表C 但我不知道如何将该表推入堆栈顶部 以便我可以将其传递给 Lua 函数 有谁知道如何做到这一点 这是我当前的代码 lua createtable state libraries size 0 int table i
  • 当格式字符串包含“{”时,String.Format 异常

    我正在使用 VSTS 2008 C Net 2 0 执行以下语句时 String Format 语句抛出 FormatException 有什么想法是错误的吗 这是获取我正在使用的 template html 的位置 我想在 templat
  • 在生产者-消费者情况下使用条件变量

    我正在尝试了解条件变量以及如何在生产者 消费者情况下使用它 我有一个队列 其中一个线程将数字推入队列 而另一个线程从队列中弹出数字 当生产线程放置一些数据时 我想使用条件变量向消费线程发出信号 问题是有时 或大多数时候 它只将最多两个项目推
  • 抽象类和接口之间的区别[重复]

    这个问题在这里已经有答案了 可能的重复 接口与基类 https stackoverflow com questions 56867 interface vs base class 我不明白抽象类和接口之间的区别 我什么时候需要使用哪种字体
  • C#:如何使用 SHOpenFolderAndSelectItems [重复]

    这个问题在这里已经有答案了 有人可以举例说明如何使用 shell 函数吗SH打开文件夹并选择项目 http msdn microsoft com en us library bb762232 VS 85 aspx来自 C 我不太明白如何使用
  • 使用 AutoMapper 进行 LINQ GroupBy 聚合

    试图让查询工作 但老实说不确定如何 或者是否可能 进行它 因为我尝试过的一切都不起作用 共查询6个表 Person PersonVote PersonCategory Category City FirstAdminDivision Per
  • SSBO 是更大的 UBO?

    我目前正在 OpenGL 4 3 中使用 UBO 进行渲染 以将所有常量数据存储在 GPU 上 诸如材料描述 矩阵等内容 它可以工作 但是 UBO 的小尺寸 我的实现为 64kB 迫使我多次切换缓冲区 减慢渲染速度 我正在寻找类似的方法来存
  • unicode().decode('utf-8', 'ignore') 引发 UnicodeEncodeError

    这是代码 gt gt gt z u u2022 decode utf 8 ignore Traceback most recent call last File
  • 多个同名内存数据库

    关系到这个答案 https stackoverflow com a 48446491 596758 我试图通过设置让多个上下文工作UseInMemoryDatabase以同名 下面的测试失败 第二个上下文为空 我还需要做什么才能在内存数据库
  • 如何使用 g++ 在 c++ 20 中使用模块?

    我读了这个链接https gcc gnu org wiki cxx modules https gcc gnu org wiki cxx modules并尝试从该网站复制以下示例 我已经知道这个编译器部分支持模块系统 注 我用的是windo
  • 局部静态变量初始化是线程安全的[重复]

    这个问题在这里已经有答案了 假设我有一个包含三个静态函数的类 如下所示 include
  • 如何使复选框不可选择?

    我想知道你是怎么做的CheckBox在c 中无法选择 我认为这会是类似 SetSelectable false 之类的东西 但我似乎看不到该方法 I found CanSelect但这似乎是只读属性 您可以设置自动检查 http msdn
  • 当我读取 500MB FileStream 时出现 OutOfMemoryException

    我使用 Filestream 读取大文件 gt 500 MB 但出现 OutOfMemoryException 任何有关它的解决方案 我的代码是 using var fs3 new FileStream filePath2 FileMode

随机推荐

  • C99 指定初始化程序重复索引在构建输出或 lint 中根本未标记

    前几天我玩了一下指定的初始化器 令我惊讶的是 多次使用相同的索引是有效的 更重要的是 当我这样做时 它甚至没有产生编译器警告 错误 甚至信息语句 甚至 PC Lint 似乎也不关心 我认为这最让我惊讶 我想知道在这种情况下编译器是否有原因甚
  • 对强连通图的最小添加

    我有一组节点和它们之间的一组有向边 边缘没有重量 如何找到必须添加的最小数量的边以使图强连接 即应该有一条从每个节点到所有其他节点的路径 这个问题有名字吗 这是一个非常经典的图问题 运行类似 Tarjan SCC 算法的算法来查找所有 SC
  • 两条线之间的角度错误

    我想得到两条线之间的角度 所以我使用了这段代码 int posX ScreenWidth gt gt 1 int posY ScreenHeight gt gt 1 double radians degrees radians atan2f
  • 用python计算梯度

    我想知道如何numpy gradient工作 我用梯度来尝试计算群速度 波包的群速度是频率相对于波数的导数 而不是一组速度 我向它提供了一个 3 列数组 前 2 列是 x 和 y 坐标 第三列是该点 x y 的频率 我需要计算梯度 我确实期
  • Git 致命:远程端挂起

    所以我以为我终于在 Windows 上完成了所有设置 然后遇到了这个问题 当前设置 网址 ssh user host port myapp git 已经运行 Putty 并且可以通过 ssh authorized keys 直接使用有效的
  • Firebase 如何处理长整型和双精度型?

    Firebase Java API 指定 Long 是传递给 setValue 的有效类型 JavaScript 只支持单一数字类型 相当于 Java 的 double 因此 如果我从 JavaScript 插入一个数字并稍后从 Java
  • 我可以在应用程序运行时以编程方式翻转 Info.plist 值吗?

    我有兴趣使用SBUsesNetwork and UIRequiresPersistentWiFi我的应用程序中的密钥 但是 我想仅在使用一组特定的视图控制器时启用它们 有没有办法在应用程序运行时以编程方式翻转这些键值 您无法在运行时修改捆绑
  • Boost Python 没有 to_python for std::unique_ptr

    我有一个无法解决的 boost python 问题 我试图公开一个包含返回函数的类std unique ptr 签名看起来像 std unique ptr
  • 在 pygame 物理模拟中添加 wxPython GUI 元素

    我做了一个pygame物理模拟 抛射运动 但它缺乏交互性 比如接受发射角度 速度等 我想添加带有增加 减少箭头的输入框 但不知道如何去做 谢谢您的帮助 也许你可以尝试PGU http www pygame org project 108 菲
  • Java 无法通过 JDBC-ODBC 从 Access 检索 Unicode(立陶宛语)字母

    我有数据库 其中一些名称是用立陶宛字母写的 但是当我尝试使用 java 获取它们时 它会忽略立陶宛字母 DbConnection zadanie connect createStatement ResultSet TYPE SCROLL I
  • 如何定义和使用 Common Lisp 包(库)?

    我在几个 Lisp 源文件中开发了一些 Common Lisp 函数 我希望这些函数可以轻松地供我编写的其他函数使用 或者如果我认为它们对其他人有用的话 可以在 github 上提供 现在 我只是将它们放在一些预定义的文件夹中并使用 req
  • Excel:将两列合并为具有交替值的一列

    如何将两列数据合并为一列 如下所示 Col1 Col2 Col3 A 1 A B 2 1 C 3 B 2 C 3 您可以在列中使用以下公式D按照我的例子 请记住增加 A 1 B 6根据您的数据范围 INDEX A 1 B 6 INT ROW
  • const 值会按实例存储吗?

    对于这样的类型 public class BlurEffect public const string Name Blur public int Amount get set 我有几个成员 比如 Name 所有成员都相同 我应该将其设为静态
  • UIButton 状态的键值观察

    UIButton 有一个状态属性 所有帐户似乎都符合 KVO 并且没有文档表明其他情况 但是 当我将观察者添加到 UIButton 的状态属性时 观察者回调从未被调用 怎么会 如果你查看 UIControl 的文档 state 属性被标记为
  • CSS 无法在生产中加载 - 开发中一切正常(Rails 4.1、Capistrano 3;bootstrap),更新:nginx 配置问题

    问题如下 在开发中一切正常 但是当我将 Rails 应用程序部署到生产环境时 该网站以纯 html 格式运行 但 CSS 引导程序 未加载 JS 可能也未加载 抱歉 我花了 2 天时间寻找了大约 15 种可能的解决方案 但无法使其发挥作用
  • 在 Visual Studio 外部启动时程序运行速度较慢

    我注意到我的程序有一些奇怪的行为 我使用 Visual Studio Professional 2013 Update 1 用 C 编写它 它由一个 exe 应用程序组成 该应用程序链接多个 DLL 并调用这些 DLL 中定义的函数 在我的
  • 如何在 MySQL 中造成死锁以进行测试

    我想让我的 Python 库与 MySQLdb 一起使用 能够检测死锁并重试 我相信我已经编写了一个很好的解决方案 现在我想测试它 对于我可以使用 MySQLdb 运行来创建死锁条件的最简单查询 有什么想法吗 系统信息 MySQL 5 0
  • Ruby 中“触发器已弃用”警告的解决方法

    我从 shell 脚本中调用 Ruby 如下所示 ruby n e print if r fromre r tore 从 Ruby 2 6 开始 我收到警告 警告 触发器已被弃用 所以看来我必须做好准备 明智的 Ruby 大祭司已经决定这个
  • 跳过第一个元素之后的所有其他元素[重复]

    这个问题在这里已经有答案了 我知道如何在 Java 中做到这一点 但我正在学习 Python 不知道如何做到这一点 我需要实现一个函数 该函数返回一个列表 其中包含列表中的所有其他元素 从第一个元素开始 到目前为止 我不确定如何从这里开始
  • 为什么 C++ 中的字符数组接受非 ASCII 字符?

    所以 我希望能够在我的 C 程序中使用中文字符 并且我需要使用某种类型来保存超出 ASCII 范围的此类字符 但是 我尝试运行以下代码 并且它有效 include