C 库 - mbtowc() 函数



C 的stdlib库的mbtowc()函数用于将'str'指向的多字节字符字符串转换为其宽字符表示形式。此函数与“mbstowcs”相同。

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

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

语法

以下是mbtowc()函数的 C 库语法 -

int mbtowc(whcar_t *pwc, const char *str, size_t n)

参数

此函数接受以下参数 -

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

  • str - 它表示指向需要转换的空终止多字节字符串的第一个元素的指针。

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

返回值

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

示例 1

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

#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
void mbtowc_func(const char *ptr, size_t max) {
   int length;
   wchar_t dest_arr;
   
   // Reset mbtowc internal state
   mbtowc(NULL, NULL, 0); 

   while (max > 0) {
      length = mbtowc(&dest_arr, ptr, max);
      if (length < 1) {
         break;
      }
      // Print each character in square braces
      printf("[%lc]", dest_arr); 
      ptr += length;
      max -= length;
   }
}
int main() {
   const char str[] = "tutorialspoint India";
   mbtowc_func(str, sizeof(str));
   return 0;
}

输出

以下是输出 -

[t][u][t][o][r][i][a][l][s][p][o][i][n][t][ ][I][n][d][i][a]

示例 2

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

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <wchar.h>
int main() {
   // Set the locale to handle multibyte characters
   setlocale(LC_ALL, "");

   const char mbString[] = "This is tutorialspoint.com"; 
   wchar_t wideChar;
   
   size_t i;

   for (i = 0; i < sizeof(mbString);) {
      int length = mbtowc(&wideChar, &mbString[i], MB_CUR_MAX);
      if (length > 0) {
	     // Print each wide character in square braces
         wprintf(L"[%lc]", wideChar); 
         i += length;
      } else {
         break;
      }
   }
   return 0;
}

输出

以下是输出 -

[T][h][i][s][ ][i][s][ ][t][u][t][o][r][i][a][l][s][p][o][i][n][t][.][c][o][m]

示例 3

让我们再创建一个示例,使用mbtowc()函数将无效的多字节序列转换为宽字符。

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

int main() {
   // Set the locale to the user's default locale
   setlocale(LC_ALL, "");

   // An invalid multibyte sequence
   const char *invalid_mb_str = "\xC3\x28";
   wchar_t ptr;
   int len;

   len = mbtowc(&ptr, invalid_mb_str, MB_CUR_MAX);

   if (len == -1) {
      printf("Invalid multibyte sequence.\n");
   } else {
      printf("Converted wide character: %lc\n", ptr);
   }
   return 0;
}

输出

以下是输出 -

Invalid multibyte sequence.
广告