在我的 Unicode、Visual Studio 2013 项目中,我尝试使用 API 中的此方法。 :
... GOpen (GCStringIn address, GCon *g)
在哪里
typedef const char * GCStringIn
//C-string input to the library. Implies null-termination.
如果我这样调用方法,GOpen 就会成功:
const CString connect = L"COM4 --baud 19200 --direct";
CT2A ascii(connect);
GOpen(ascii, &g);
但是如果我这样调用,GOpen 会失败:
const CString connect = L"COM4 --baud 19200 --direct";
GOpen(getCharPointer(connect), &g);
...
const char * getCharPointer(const CString &cstr)
{
CT2A ascii(cstr);
return ascii;
}
我做错了什么导致从 getCharPointer 方法返回的字符串不能与 GOpen 一起使用,我该如何修复它以便我可以在一个方法中进行这种转换?
最佳答案
CT2A
是一个包含 char*
的类。 CT2A
的析构函数释放 char*
指向的内存。所以当 getCharPointer()
返回时,它返回的指针指向无效内存。您需要将 ascii
指向的字符串复制到您拥有的内存中。最简单的方法可能是返回 std::string
而不是原始 char*
,然后您可以使用 std::string: :c_str()
方法将其传递给 GOpen()
。
关于c++ - 在方法中将 Unicode CString (wchar_t) 转换为 const char *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31863173/