wchar_t*的字符数有限制吗

问题描述 投票:0回答:1

我有一个函数可以在 wchar_t* 中创建 const char* 的副本

wchar_t* to_wchar(const char* line)
{
    size_t line_length = strlen(line) + 1;
    wchar_t* wchar_name_temp = new wchar_t[line_length];
    size_t outSize;
    mbstowcs_s(&outSize, wchar_name_temp, line_length, line, strlen(line));
    wchar_t* wchar_name = wchar_name_temp;
    delete[] wchar_name_temp;
    return wchar_name;
}

但是当我在主函数中调用它时,我遇到的问题是,在一定数量的符号(对我来说是 44 个)下,它分配了在函数第二行的堆上分配的地址,尽管创建了一个副本堆栈中该行的

int main()
{
    wchar_t* str = to_wchar("10010101010101010101010101010101010101010101"); //random line
    return 0;
}
c++ wchar-t wstring
1个回答
0
投票

尽管在堆栈中创建该行的副本

您尚未制作任何副本。您已经分配了一个指针。这就是您的代码所说的,这就是它所做的。

wchar_t* wchar_name = wchar_name_temp;
delete[] wchar_name_temp;
return wchar_name;

这会删除分配的内存,然后立即返回它,这几乎肯定是不正确的。如果您想像这样复制堆分配的 C 样式数组,则需要使用

for
循环或
std::copy
显式执行此操作。

但在这个简单的示例中,您应该只返回

wchar_name_temp
并完全忘记删除,因为无论如何您都会将其返回给调用者。

© www.soinside.com 2019 - 2024. All rights reserved.