【问题标题】:Converting form CString to const char*将表单 CString 转换为 const char*
【发布时间】:2015-07-03 23:46:12
【问题描述】:

我写了一个将CString转换成const char *的方法:

const char* CAESDlg::ConvertToChar(CString str) {
    CStringA charstr(str);
    const char *cstr = (const char *)charstr;
    return cstr;
}

但当尝试将其放入 const char * 时,它不会返回正确的值!

const char *test = ConvertToChar(filePath);

【问题讨论】:

  • 我们无法知道CString 是什么。
  • CStringCStringA 是如何定义的?
  • 虽然调试 cstr 包含一个有效值,但在这一行 const char *test = ConvertToChar(filePath);它等于一个错误的值
  • 您的函数正在返回一个悬空指针。你到底想做什么?
  • 我有一个 CString,我想将其转换为 const char * 以将其传递给采用 const char * 的方法

标签: c++ constants c-strings


【解决方案1】:

在不知道CStringCStringA 的情况下,我只能猜测,但似乎您在访问指针指向的值时返回指向局部变量(即UB)的指针。

如果您想使用CString 对象作为const char* 参数,您可能希望使用LPCTSTR 而不是您自己编写的ConvertToChar 函数。

【讨论】:

  • @AhmedAli:有多种可能性,取决于您要如何使用该功能,但我个人建议不要使用const char*,而是使用std::string。顺便说一句:你应该看看this question
  • @AhmedAli:请参阅我的编辑以响应您 cmets 中的信息。
  • 我在尝试使用 LPCTSTR 时遇到此错误,LPCTSTR 类型的值不能用于初始化 const char * 类型的实体
【解决方案2】:

charstr 的值在调用者将其分配给变量之前在函数末尾被销毁。

你不需要函数,调用者可以直接使用CStringA,注意testsFilePathA超出范围之前是有效的。

CStringA sFilePathA(filePath);
const char *test = sFilePathA;

【讨论】:

    猜你喜欢
    • 2010-10-25
    • 2012-09-17
    • 2015-08-07
    • 2020-06-12
    • 1970-01-01
    • 2011-07-26
    • 2015-05-14
    • 1970-01-01
    相关资源
    最近更新 更多