C 库 - mbstowcs() 函数



C 的stdlibmbstowcs() 函数用于将 'str' 指向的多字节字符字符串转换为 'pwcs' 指向的数组。

转换后的字符存储在 'pwcs' 指向的数组的连续元素中。

目标数组最多只能容纳 n 个宽字符。

语法

以下是 mbstowcs() 函数的 C 库语法:

size_t mbstowcs(schar_t *pwcs, const char *str, size_t n)

参数

此函数接受以下参数:

  • pwcs − 它表示指向 wchar_t 元素数组的指针,该数组足够长,可以存储最多 n 个字符的宽字符串。

  • str − 它表示指向需要转换的以 null 结尾的多字节字符串的第一个元素的指针。

  • n − 它表示 'pwcs' 指向的数组中存在的最大 wchar_t 字符数。

返回值

此函数返回转换的字符数,不包括 null 字符。如果找到无效的多字节字符,则返回 -1。

示例 1

在这个例子中,我们创建一个基本的 c 程序来演示 mbstowcs() 函数的使用。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <wchar.h>
#include <locale.h>

int main() {
   // UTF-8 encoded multibyte string
   const char *mbstr = "zß?\xF0\x9F\x8D\x8C";
   
   // Set locale for UTF-8
   setlocale(LC_ALL, "en_US.utf8");
   
   // Wide character array
   wchar_t wcs[5];

   size_t len = mbstowcs(wcs, mbstr, 5);
   if (len != (size_t)-1) {
      wprintf(L"Wide string: %ls\n", wcs);
   } else {
      perror("Conversion error");
   }
   
   return 0;
}

输出

以下是输出:

Conversion error: Invalid or incomplete multibyte or wide character

示例 2

下面的 c 示例使用 mbstowcs() 函数将多字节字符串转换为宽字符字符串。

#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <locale.h>

int main() {
   // Multibyte string
   const char *mbstr = "Hello, world!"; 
   
   // Set locale for UTF-8
   setlocale(LC_ALL, "en_US.utf8"); 
   
   // Wide character array (adjust size as needed)
   wchar_t wcs[20];
   
   size_t len = mbstowcs(wcs, mbstr, sizeof(wcs) / sizeof(wcs[0]));
   if (len != (size_t)-1) {
      wprintf(L"Wide string: %ls\n", wcs);
   } else {
      perror("Conversion error");
   }
   return 0;
}

输出

以下是输出:

Wide string: Hello, world!

示例 3

让我们创建另一个 c 程序来转换多字节字符串为宽字符字符串,并显示宽字符。

#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <locale.h>

int main() {
   // Multibyte string
   const char *mbstr = "Hello World \n This is tutorialspoint"; 
   
   // Set locale for UTF-8
   setlocale(LC_ALL, "en_US.utf8"); 
   
   // Wide character array (adjust size as needed)
   wchar_t wcs[25];
   
   size_t len = mbstowcs(wcs, mbstr, sizeof(wcs) / sizeof(wcs[0]));
   if (len != (size_t)-1) {
      wprintf(L"Wide string: %ls\n", wcs);
   } else {
      perror("Conversion error");
   }
   return 0;
}

输出

以下是输出:

Wide string: Hello World
This is tut
广告