función vswprintf() en C/C++

Esta función vswprintf() escribe la string ancha en el búfer de string ancha. Se escribe un máximo de (len-1) caracteres de ancho en el búfer, seguido de un carácter de ancho nulo.

Sintaxis:

int vswprintf( wchar_t* ws, size_t len, const wchar_t* formato, va_list arg )

Parámetros: La función acepta cuatro parámetros obligatorios que se describen a continuación:

  • ws: especifica el puntero a un búfer de string ancha dado que almacenará el resultado
  • len: especifica la longitud máxima de los caracteres anchos que se vuelven a escribir en el búfer, incluido el carácter nulo de terminación
  • formato: especifica el puntero a una string ancha terminada en nulo
  • arg: especifica el valor que identifica una lista de argumentos variables

Nota: Todos los especificadores de formato tienen el mismo significado que en printf , por lo tanto, %lc se debe usar para escribir un carácter ancho (y no %c ), y %ls se debe usar para strings anchas (y no %s ).

Valor de retorno: la función devuelve dos valores como se muestra a continuación:

  • En caso de éxito, la función vswprintf() devuelve el número de caracteres anchos escritos, excluyendo el carácter ancho nulo final.
  • Se devuelve un número negativo en caso de falla, incluso cuando la string resultante que se escribirá en ws tendría más de n caracteres.

Los siguientes programas ilustran la función anterior:
Programa 1:

// C++ program to illustrate the
// vswprintf() function
#include <bits/stdc++.h>
using namespace std;
   
// function to check the number
// of wide characters written
void find ( wchar_t* ws, size_t len, const wchar_t *format, ... )
{
    // hold the variable argument
    va_list arg;
       
    // A function that invokes va_start
    // shall also invoke va_end before it returns.
    va_start ( arg, format );
   
    vswprintf ( ws, len, format, arg );
   
    va_end ( arg );
}
   
// Driver code
int main ()
{
    // buffer with size 60 
    wchar_t ws[60];
      
    // initializing the string as latin characters
    wchar_t str[] = L"\u0025 \u0026 \u0027 \u0028 \u0029";
      
    // print the letters
    find(ws, 60, L"Some Latin letters : %ls\n", str);
    wprintf(L" %ls ", ws);
   
    return 0;
}
Producción:

Some Latin letters : % & ' ( )

Programa 2:

// C++ program to illustrate the
// vswprintf() function
// When the size of the buffer is smaller
// than the total length of the string written 
#include <bits/stdc++.h>
using namespace std;
  
// function to check the number
// of wide characters written
void find ( wchar_t* ws, size_t len, const wchar_t *format, ... )
{
    // hold the variable argument
    va_list arg;
      
    // A function that invokes va_start
    // shall also invoke va_end before it returns.
    va_start ( arg, format );
  
    vswprintf ( ws, len, format, arg );
  
    va_end ( arg );
}
  
// Driver code
int main ()
{
    // initializing the string as english characters
    wchar_t str[] = L"Geek for geeks";
  
    // buffer with size 20 
    wchar_t ws[20];
      
        find(ws, 20, L"GFG is : %ls\n", str);
    wprintf(L"%ls", ws);
  
    return 0;
}
Producción:

GFG is : Geek for g

Nota: Si la string resultante tiene más de n-1 caracteres de ancho, los caracteres restantes se descartan y no se almacenan.

Publicación traducida automáticamente

Artículo escrito por AmanSrivastava1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *