c++ - 无法将宽字符串转换为多字节字符串
问题描述
我想将宽字符串转换为多字节字符串。
以下程序给了我一个错误:
#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,
| ^~~~~~~~~~
解决方案
我将函数 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);
}
}
~
~
推荐阅读
- node.js - Electron-builder - 在开发和生产中包含 sqlite 数据库的路径
- c# - 我如何检查某些字符前面是否写了一些东西
- mysql - 如何在 node.js 中减去 knex.raw 中的查询
- swift3 - 标签栏视图控制器创建中的混乱
- angularjs - Angularjs Jasmine 模拟方法调用控制器实例化
- c# - 使用 C# 从 OWA(本地 Outlook Web 访问)检索约会
- excel - 使用 Excel INDIRECT 或其他函数引用具有日期格式 (dd mmm yyyy) 的工作表名称的单元格以显示所选工作表单元格数据
- spring - Spring自动装配具有大小的对象列表
- python - Scipy ckdtree - boxsize 参数
- node.js - 获取 node.js 生成的 Angular 组件 HTML