【发布时间】:2014-11-19 12:32:23
【问题描述】:
短版我使用的是 unicode。我正在尝试将 std::string 用于需要 const WCHAR string; 的函数。 DrawString(const WCHAR, ...
我用 GCC 编译。一切都是 unicode,我已经指定了。
我一直在尝试将字符串转换为 wchar_t*。目的是让我可以使用 GDI+ 函数输出,它的参数需要它。
这是我输出字符串文字的方式,没有问题,调试正常,工作正常。 http://msdn.microsoft.com/en-us/library/ms535991%28v=vs.85%29.aspx 参考原因:
// works fine
wchar_t* wcBuff;
wcBuff = (wchar_t*)L"Some text here.\0";
AddString(wcBuff, wcslen(wcBuff), &gFontFamilyInfo, FontStyleBold, 20, ptOrg_Controls, &strFormat_Info);
现在这是我一整天都在尝试的方法,附带说明:我的转换函数工作正常,这不是问题,也不是创建问题。
// problems
string s = "Level " + convert::intToString(6) + "\0";
// try 1 - Segfault
wchar_t* wcBuff = new wchar_t[s.length() + 1];
copy(s.begin(), s.end(), wcBuff);
// random tries, compiles, but access violations (my conversion function here has worked other places, do not know for sure here.
wchar_t* wcBuff;
wstring wstr = convert::stringToWideChar(s);
wstring strvalue = convert::stringToWideChar(s);
wcBuff = (wchar_t*)strvalue.c_str();
wcBuff = (wchar_t*)wstr.c_str();
wstring foo;
foo.assign(s.begin(), s.end());
wcBuff = (wchar_t*)foo.c_str();
一切都会编译,但随后会出现问题。一旦达到该点,就会出现一些运行时错误。其他人访问违规和段错误。有些编译调试没问题,但是输出的字符串会随着随机字符不断变化。
有什么想法吗?
【问题讨论】:
-
我实际上阅读了该主题,并尝试了所有示例,但没有一个有效。我没有使用 Visual Studio,所以我没有包含的头文件。 @Potatoswatter 的两个示例都导致随机字符串输出。
-
你的
std::string的编码是什么? (我不知道)GDI+ 函数期望的编码是什么? (也许是 UTF-16?)顺便说一句,(wchar_t*)L"Some text here.\0"很危险。 -
什么是
convert::stringToWideChar,您认为它为什么有效?为什么要手动为空终止字符串?为什么你是 C 风格的铸造?停止那个:这是危险的,你做错了。当你在几行之前newed 它时,为什么你在指针上使用=?您应该参加 C++ 入门课程并了解指针的工作原理,您使用错了。这是谷歌上关于该主题的第二次点击:cprogramming.com/tutorial/lesson1.html