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.tw";

   // 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.tw

示例 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
廣告
© . All rights reserved.