• C++ Reference: Standard C++ Library reference: C Library: cwchar: wcsrtombs


    C++官网参考链接:https://cplusplus.com/reference/cwchar/wcsrtombs/

    函数

    wcsrtombs
    size_t wcsrtombs (char* dest, const wchar_t** src, size_t max, mbstate_t* ps);
    将宽字符字符串转换为多字节字符串
    将src间接指向的C宽字符串的max个字符转换为它们的等价多字节序列,并将它们存储在dest指向的缓冲区中,如果遇到终止的空宽字符就停止(它也被转换和存储,但不计入函数返回的长度中)。
    该函数使用(并更新)由ps描述的移位状态。如果ps是空指针,则该函数使用自己的内部移位状态,只有在必要时调用该函数才能更改该状态。
    如果该函数转换整个C宽字符串(直到找到空宽字符),且dest不是空指针,则该函数将src设置为空指针值,并保证结果状态为初始转换状态。
    此函数的行为取决于所选C语言环境(C locale)的LC_CTYPE类别。
    这是wcstombs)的可重新启动版本。

    形参 
    dest 
    指向char元素数组的指针,长度足够存储max个字节的C字符串。
    如果这是一个空指针,函数不存储结果序列,但仍然计算需要多少字节来存储src的转换(在这种情况下形参max被忽略)。
    src
    指向要转换的C宽字符串的指针(间接指针)。
    如果转换过早停止,此值由函数修改为指向最后一个转换后的宽字符之后的位置,如果函数到达终止空字符,则指向空指针。
    max
    写入dest的最大字节数量。
    size_t是无符号整型。
    ps
    指向定义转换状态的mbstate_t对象的指针。

    返回值
    写入dest的字节数量(不包括最终终止的空字符)。
    如果在转换过程中,函数遇到一个没有有效多字节序列等价的宽字符,则函数将errno设置为EILSEQ并返回(size_t)-1(src将指向第一个无法转换的字符)。
    注意,size_t是无符号整型,因此返回的值都不可能小于0。

    用例 
    /* wcsrtombs example */
    #include
    #include

    int main() {
      const wchar_t str[] = L"wcstombs example";
      const wchar_t * p;
      mbstate_t mbs;
      char buffer[32];
      int ret;

      mbrlen (NULL,0,&mbs);    /* initialize mbs */

      printf ("wchar_t string: %ls \n",str);

      p = str;
      ret = wcsrtombs ( buffer, &p, sizeof(buffer), &mbs );
      if (ret==32) buffer[31]='\0';
      if (ret) printf ("multibyte string: %s \n",buffer);

      return 0;
    }
    输出:

  • 相关阅读:
    spring java 动态获取consul K/V
    回归预测 | MATLAB实现IBES-ELM基于改进的秃鹰搜索优化算法优化极限学习机的数据回归预测(多指标,多图)
    iOS视频捕获入门篇
    15 验证差分时钟输入转单端
    408计算机网络知识点简记 (背诵用
    残差网络ResNet解读
    三谈exception——错误处理
    Java流式编程Stream
    如何在Linux上搭建本地Docker Registry并实现远程连接
    SpringBoot - 配置文件application.yml使用详解
  • 原文地址:https://blog.csdn.net/weixin_40186813/article/details/127495694