首页 > 解决方案 > 无法将宽字符串转换为多字节字符串

问题描述

我想将宽字符串转换为多字节字符串。

以下程序给了我一个错误:

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

#define BUFFER_SIZE 100

int main( void )
{
    size_t   i;
    char      *pMBBuffer = (char *)malloc( BUFFER_SIZE );
    wchar_t*pWCBuffer = L"Hello, world.";

    printf( "Convert wide-character string:\n" );

    // Conversion
    wcstombs_s(&i, pMBBuffer, (size_t)BUFFER_SIZE,
               pWCBuffer, (size_t)BUFFER_SIZE );

    // Output
    printf("   Characters converted: %u\n", i);
    printf("    Multibyte character: %s\n\n",
     pMBBuffer );

    // Free multibyte character buffer
    if (pMBBuffer)
    {
    free(pMBBuffer);
    }
}

我用 C++11 编译器编译。错误是:

error: ‘wcstombs_s’ was not declared in this scope; did you mean ‘wcstombs’?
   19 |     wcstombs_s(&i, pMBBuffer, (size_t)BUFFER_SIZE,
      |     ^~~~~~~~~~

标签: c++winapi

解决方案


我将函数 wcstombs_s 修改为 wcstombs 如下:它工作正常:

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

#define BUFFER_SIZE 100

int main( void )
{
    size_t   i;
    char      *pMBBuffer = (char *)malloc( BUFFER_SIZE );
    wchar_t*pWCBuffer = L"Hello, world.";

    printf( "Convert wide-character string:\n" );

        wcstombs(pMBBuffer, pWCBuffer, (size_t)BUFFER_SIZE);



    // Output
    printf("    Multibyte character: %s\n\n",
     pMBBuffer );

    // Free multibyte character buffer
    if (pMBBuffer)
    {
    free(pMBBuffer);
    }
}
~  

                                                                                                                                                                                                    

~


推荐阅读