![The C Standard Library Reference](/c_standard_library/images/c-mini-logo.jpg)
- The C Standard Library
- C Library - Home
- C Library - <assert.h>
- C Library - <complex.h>
- C Library - <ctype.h>
- C Library - <errno.h>
- C Library - <fenv.h>
- C Library - <float.h>
- C Library - <inttypes.h>
- C Library - <iso646.h>
- C Library - <limits.h>
- C Library - <locale.h>
- C Library - <math.h>
- C Library - <setjmp.h>
- C Library - <signal.h>
- C Library - <stdalign.h>
- C Library - <stdarg.h>
- C Library - <stdbool.h>
- C Library - <stddef.h>
- C Library - <stdio.h>
- C Library - <stdlib.h>
- C Library - <string.h>
- C Library - <tgmath.h>
- C Library - <time.h>
- C Library - <wctype.h>
- C Standard Library Resources
- C Library - Quick Guide
- C Library - Useful Resources
- C Library - Discussion
- C Programming Resources
- C Programming - Tutorial
- C - Useful Resources
C library - wcstombs() function
The C stdlib library wcstombs() function is used to convert a wide-character string (pwcs) to its multi-byte string (str).
This function is commonly useful in programs that handle multiple character encodings, especially when dealing with internationalization and localization.
Syntax
Following is the C library syntax of the wcstombs() function −
size_t wcstombs(char *str, const wchar_t *pwcs, size_t n)
Parameters
This function accepts following parameters −
str − It represent a pointer to the destination array where the resulting multi-byte string will be stored.
pwcs − It represents a wide character string to be converted.
n − It represent maximum number byte to be written to 'str'.
Return Value
This function returns the number of bytes (not characters) converted and written to str, excluding the ending null character. If an invalid multi-byte character is encountered, a -1 value is returned.
Example 1
In this example, we create a c program to demonstrate the use of wcstombs() function.
#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; }
Output
Following is the output −
Converted multibyte string: Hello tutorialspoint
Example 2
The following example convert a wide-character string to a multi-byte string sequence using wcstombs() function.
#include <stdio.h> #include <stdlib.h> int main () { size_t ret_val; char *mbstr = (char *)malloc(50); wchar_t *pwcs = L"https://www.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); }
Output
Following is the output −
Characters converted = 30 Multibyte character = https://www.tutorialspoint.com
Example 3
Let's create another example, we convert a wide-character string containing different special characters to a multi-byte string using wcstombs() function.
#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; }
Output
Following is the output −
Converted multibyte string: Welcome tutorialspoint @#- Number of bytes written (excluding null terminator): 26