📜  C / C++中的vswprintf()函数

📅  最后修改于: 2021-05-25 22:36:54             🧑  作者: Mango

这个vswprintf()函数将宽字符串写入宽字符串缓冲区。最多将(len-1)个宽字符写入缓冲区,后跟一个空宽字符。

句法:

参数:该函数接受四个强制性参数,如下所述:

  • ws:指定指向给定宽字符串缓冲区的指针,该缓冲区将存储结果
  • len:指定写回缓冲区的宽字符的最大长度,包括终止的空字符
  • 格式:指定指向以空终止的宽字符串的指针
  • arg:指定标识变量参数列表的值

注意:所有格式说明符的含义与printf中的含义相同,因此, %lc将用于写入宽字符(而不是%c ), %ls将用于宽字符串(而不是%s )。

返回值:该函数返回两个值,如下所示:

  • 成功完成后,vswprintf()函数将返回写入的宽字符数,但不包括终止的null宽字符。
  • 失败时返回负数,包括要写入ws的结果字符串长于n个字符。

下面的程序说明了上述函数:
程序1:

// C++ program to illustrate the
// vswprintf() function
#include 
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;
}
输出:
Some Latin letters : % & ' ( )

程序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 
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;
}
输出:
GFG is : Geek for g

注意:如果结果字符串比n-1个宽字符,则其余字符将被丢弃而不存储。

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”