wcstombs&在堆上为字符数组分配内存

时间:2017-10-12 18:03:24

标签: c++11 memory-management smart-pointers wstring widechar

我正在阅读一个包含单个宽字符行的文件。但是,我永远不知道它将会持续多久。我已经把它读成了std::wstringinString,并且设法用空气创建了多字节字符串(Q1 - 这些被称为r值吗?)。 Q2 - 现在,如何在堆中为此分配内存并获取指向它的智能指针?我不想使用newmalloc(并最终调用freedelete)或任何常量来将其存储在堆栈中(因为我永远不会知道最大值)长度)。 Q3 - 我可以在这里使用make_sharedmake_unique功能模板吗? Q4 - 具体来说,我可以得到像shared_ptr<char>这样的指针指向堆上分配的char数组吗?

我尝试过以下内容,

std::shared_ptr<char> MBString(const_cast<char*>(std::string(inString.begin(), inString.end()).c_str()));

它不起作用。我在互联网上尝试了一些建议,但我还不知道该怎么做。

Q5 - 更不用说宽字符到多字节转换了,一般来说,如何在堆上分配一个任意长度的char字符串并获得一个指向它的智能指针?

std::wfstream inFile(L"lengthUnkown.txt", std::ios::in);
std::wstring inString;
inFile >> inString;
std::wcout << inString << std::endl; //prints correctly
std::cout << (const_cast<char*>(std::string(inString.begin(), inString.end()).c_str())) << std::endl; //this prints the line correctly as expected
//convert wide character string to multi-byte on the heap pointed, to by MBString 
//std::cout << MBString << std::endl; //I want to print the multi-byte string like this
return 0;

1 个答案:

答案 0 :(得分:1)

不是最佳资源,但可靠:

X = [1 , 1 , 1];
X = [1, 2 , 2];
X = [3 , 1 ,2];