C 库 - wcstombs() 函数



C 的stdlibwcstombs() 函数用于将宽字符字符串 (pwcs) 转换为其多字节字符串 (str)。

此函数通常用于处理多种字符编码的程序,尤其是在处理国际化和本地化时。

语法

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

size_t wcstombs(char *str, const wchar_t *pwcs, size_t n)

参数

此函数接受以下参数:

  • str − 表示指向目标数组的指针,生成的多个字节字符串将存储在此处。

  • pwcs − 表示要转换的宽字符字符串。

  • n − 表示要写入 'str' 的最大字节数。

返回值

此函数返回转换为 str 并写入 str 的字节数(而不是字符数),不包括结尾的空字符。如果遇到无效的多字节字符,则返回 -1。

示例 1

在此示例中,我们创建一个 C 程序来演示 wcstombs() 函数的使用。

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

int main() {
   setlocale(LC_ALL, "");
   
   // Wide-character string
   const wchar_t pwcs[] = L"Hello tutorialspoint";
   
   // Buffer to hold the multibyte string
   char mbstr[256];
   
   // Convert wide-character string to multibyte string
   size_t len = wcstombs(mbstr, pwcs, sizeof(mbstr));
   
   if (len == (size_t)-1) {
      printf("Conversion failed.\n");
   } else {
      printf("Converted multibyte string: %s\n", mbstr);
   }
   return 0;
}

输出

以下是输出:

Converted multibyte string: Hello tutorialspoint

示例 2

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

#include <stdio.h>
#include <stdlib.h>
int main () {
   size_t ret_val;
   char *mbstr = (char *)malloc(50);
   wchar_t *pwcs = L"https://tutorialspoint.com";

   // converting wide-character string to multi-byte
   ret_val = wcstombs(mbstr, pwcs, 50);
   
   printf("Characters converted = %lu\n", ret_val);
   printf("Multibyte character = %s\n\n", mbstr);
   
   return(0);
}

输出

以下是输出:

Characters converted = 30
Multibyte character = https://tutorialspoint.com

示例 3

让我们创建另一个示例,我们将包含不同特殊字符的宽字符字符串使用 wcstombs() 函数转换为多字节字符串。

#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, "");

   // Wide-character string with special characters and emojis
   const wchar_t pwcs[] = L"Welcome tutorialspoint @#-";

   char mbstr[256];

   // Convert wide-character string to multibyte string
   size_t ret = wcstombs(mbstr, pwcs, sizeof(mbstr));
   
   // If conversion failed
   if (ret == (size_t)-1) {
      printf("Conversion failed.\n");
   } else {        
      // Conversion succeeded
      printf("Converted multibyte string: %s\n", mbstr);
      printf("Number of bytes written (excluding null terminator): %zu\n", ret);
   }
   return 0;
}

输出

以下是输出:

Converted multibyte string: Welcome tutorialspoint @#-
Number of bytes written (excluding null terminator): 26
广告