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

09-25 20:58