c++ - 在方法中将 Unicode CString (wchar_t) 转换为 const char *

标签 c++ visual-studio-2013 unicode

在我的 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/

相关文章:

c++ - 是否可以用虚拟实现替换 DLL 但使用原始 LIB 文件

c++ - 模板 T 类数组

c++ - Intellisense 期望 ';' 带有多行字符串文字

c# - 使用 try catch 时如何知道可能的异常?

python - 带有 Unicode 项的 ConfigParser

php - 在MySQL中存储单个空格字符

c# - 将 UTF-16 字节数组编码为字符串字符 C# .NET

c++ - 一个类是否可以在其构造函数的参数中设置它从另一个类继承的变量的值?

c++ - 在C++中分割偶数字符串

javascript - 在 Visual Studio 中为 JavaScript 生成 javadoc