【问题标题】:Terminating unicode null character终止 unicode 空字符
【发布时间】:2012-09-06 14:45:48
【问题描述】:

我有一个 wchar_t 数组。我需要在数组中的特定位置添加一个 unicode 空字符。

wchar_t var1[100];

var1[79] = '\u0000';

我尝试了上述但得到以下编译错误。

error C3850: '\u0000': a universal-character-name specifies an invalid character

如何添加 unicode 空字符?

【问题讨论】:

    标签: c++ visual-studio-2010 visual-c++


    【解决方案1】:

    我认为你可以使用

    var1[79] = L'\0'
    

    【讨论】:

      【解决方案2】:

      该语言不允许您对无需使用 UCN 即可轻松编写的字符使用通用字符名称。这就是不允许使用'\u0000' 的原因。 (我不太确定该规则的基本原理是什么。)

      因为var1wchar_t 的数组,所以L'\0' 是最直接的使用方法。

      但是由于charwchar_tint都是整数类型,并且任何整数类型的值都可以分配给另一个整数类型的对象(只要值在目标类型),以下任何一种都可以:

      var1[79] = L'\0'; // best
      var1[79] = '\0';  // char value converted to wchar_t
      var1[79] = 0;     // int value converted to wchar_t
      

      【讨论】:

      • 是的,C++03 §2.2/2 说“如果通用字符名称的十六进制值小于 0x20 或在 0x7F-0x9F(含)范围内,或者如果通用字符名称指定基本源字符集中的字符,则程序格式错误。”
      【解决方案3】:

      我使用原始 api32 编写了一些简单的窗口应用程序,我最好的猜测是使用 L'\0'。

      【讨论】:

        【解决方案4】:

        整数零也可以:

        var1[79] = 0;
        

        【讨论】:

        • 我总觉得给角色分配数字是个坏主意,更喜欢'\0'
        猜你喜欢
        • 2020-12-19
        • 1970-01-01
        • 1970-01-01
        • 2011-06-04
        • 2017-12-17
        • 2012-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多