一个wcstombs的问题
有函数如下:
1 string wcstombs(const wstring &str)
2 {
3 size_t len=wcstombs(NULL, str.c_str(), 0);
4 boost::scoped_array <char> buf(new char[len]);
5
6 len=wcstombs(buf.get(), str.c_str(), len);
7 if(len==static_cast <size_t> (-1))
8 throw runtime_error( "wcstombs(): unable to convert character ");
9
10 return string(buf.get(), len);
}
运行时,第二次wcstombs时(第7行)返回进为-1,程序退出,寻求帮助。谢谢。
[解决办法]
#include <iostream>
#include <string>
#include <vector>
using namespace std;
#include <math.h>
string wcstombs(const wstring &str)
{
size_t len = wcstombs(NULL, str.c_str(), 0);
vector <char> buf(len + 1);
len = wcstombs(&buf[0], str.c_str(), len);
if ( len == static_cast <size_t> (-1) )
throw runtime_error( "wcstombs(): unable to convert character ");
return string(&buf[0]);
}
int main(int argc, char *argv[])
{
//目的是取出bcde
cout < < wcstombs(L "abce ") < < endl;
return 0;
}