在我的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()
。