【问题标题】:Converting char to wide char将字符转换为宽字符
【发布时间】:2013-02-23 13:33:30
【问题描述】:

我正在尝试使用mbstowcs_s 函数将多字节字符序列转换为相应的宽字符序列。但我一直有以下堆损坏问题。谁能告诉我如何解决这个问题?

这是一个示例代码。调试时,总是delete wc_name 导致问题。我知道不应该这样。

#include <Windows.h>
#include <iostream>
#include <string>
int main (int argc, char *argv[]) { 
    size_t returnValue; // The number of characters converted.
    const size_t sizeInWords = 50; // The size of the wcstr buffer in words
    const char* c_name = "nanana"; // The address of a sequence of characters
    wchar_t *wc_name = new wchar_t(50); 

    errno_t err = mbstowcs_s(&returnValue, wc_name, sizeInWords, 
                                              c_name, strlen(c_name) );

    wcout << wc_name << endl;
    delete wc_name;
    return 0;
}

【问题讨论】:

    标签: c++ windows char wchar


    【解决方案1】:

    wchar_t *wc_name = new wchar_t(50); 应该是 wchar_t *wc_name = new wchar_t[50]; 来分配一个数组。而对应的delete wc_name应该是delete[] wc_name;。顺便说一句,如果您在编译时知道数组本身的大小,则不需要动态内存分配。你可以简单地做wchar_t wc_name[50];

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-05
      • 2011-10-03
      • 2017-04-16
      • 1970-01-01
      • 2010-12-09
      • 2020-02-03
      • 2015-01-18
      • 1970-01-01
      相关资源
      最近更新 更多