【问题标题】:Copy from char16_t* to char16_t*从 char16_t* 复制到 char16_t*
【发布时间】:2017-04-27 21:44:48
【问题描述】:

我正在尝试复制 char16_t*,它已传递到函数中,但没有找到任何方法。

foo(char16_t* characters) {
    char16_t* copiedCharacters;
    //copy characters to copiedCharacters
}

我尝试使用strncopy(),但它只复制char*

【问题讨论】:

    标签: c string char16-t


    【解决方案1】:

    有一个已知的构造(借自strcpy):

    char16_t* str16cpy(char16_t* destination, const char16_t* source)
    {
        char16_t* temp = destination;
        while((*temp++ = *source++) != 0)
        ;
        return destination;
    }
    

    【讨论】:

    • 对于 windows,我看不到包含这个 str16cpy 的头文件。你有什么线索吗?
    • 这是因为 str16cpy() 是一个自定义函数(我自己的)。不需要标题。
    【解决方案2】:

    只需调整strcpy implementation

    char16_t *mystrcpy(char16_t *dest, const char16_t *src)
    {
      unsigned i;
      for (i=0; src[i] != '\0'; ++i)
        dest[i] = src[i];
      dest[i] = '\0';
      return dest;
    }
    

    【讨论】:

    • 如果使用索引,类型应该是size_t
    • chqrlie: open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf "7.17 通用定义 (...) size_t 是 sizeof 运算符结果的无符号整数类型"
    • size_tsome 无符号整数类型。它不是unsigned 的同义词。例如:size_t 可能比 unsigned 宽。 size_t 是用于数组索引和大小计算的最佳类型 - 既不太窄也不太宽。
    • chux:给我看标准中关于它的片段。此外,size_t 不是数组索引和大小计算的最佳类型,因为溢出行为导致性能下降。 Bjarne Stroustrup 很遗憾size_t 没有签名。
    • 我认为 chux 所指的部分在 N1570 $6.2.5 p6 中,它定义了标准文档中 无符号整数类型 的含义。当标准提到特定类型时,它明确提到它。 size_t 的定义中不会发生这种情况。
    猜你喜欢
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    相关资源
    最近更新 更多