将表单 CString 转换为 const char*
Converting form CString to const char*
我写了一个方法将形式 CString
转换为 const char *
:
const char* CAESDlg::ConvertToChar(CString str) {
CStringA charstr(str);
const char *cstr = (const char *)charstr;
return cstr;
}
但是当试图将其放入 const char *
时,它 return 不是正确的值!
const char *test = ConvertToChar(filePath);
在不知道 CString
和 CStringA
的情况下,我只能猜测,但似乎您一访问指针的值就返回一个指向局部变量(即 UB)的指针指向.
如果您想使用 CString
对象作为 const char*
参数,您可能想使用 LPCTSTR 而不是您自己编写的 ConvertToChar
函数。
charstr
的值在调用者将其分配给变量之前在函数末尾被销毁。
您不需要函数,调用者可以直接使用 CStringA
并注意 test
在 sFilePathA
超出范围之前有效。
CStringA sFilePathA(filePath);
const char *test = sFilePathA;
我写了一个方法将形式 CString
转换为 const char *
:
const char* CAESDlg::ConvertToChar(CString str) {
CStringA charstr(str);
const char *cstr = (const char *)charstr;
return cstr;
}
但是当试图将其放入 const char *
时,它 return 不是正确的值!
const char *test = ConvertToChar(filePath);
在不知道 CString
和 CStringA
的情况下,我只能猜测,但似乎您一访问指针的值就返回一个指向局部变量(即 UB)的指针指向.
如果您想使用 CString
对象作为 const char*
参数,您可能想使用 LPCTSTR 而不是您自己编写的 ConvertToChar
函数。
charstr
的值在调用者将其分配给变量之前在函数末尾被销毁。
您不需要函数,调用者可以直接使用 CStringA
并注意 test
在 sFilePathA
超出范围之前有效。
CStringA sFilePathA(filePath);
const char *test = sFilePathA;