我使用ATL转换宏A2T在std :: string和const TCHAR *之间进行转换。然后我将TCHAR *提供给另一个函数来解析文件。当我执行以下操作时,它可以工作:
USES_CONVERSION;
const TCHAR* fileName = A2T(file.c_str());
foo(filename);
但是,我尝试使用新函数重构空检查和转换:
const TCHAR* StringToTChar(const string s)
{
/* To be added in
if(s.empty())
{
return NULL;
}
*/
USES_CONVERSION;
const TCHAR *ts= A2T(s.c_str());//Using ATL, convert to TCHAR*
// assert(ts!=NULL); to be added
return ts;
}
现在函数foo(filename)说它无法打开我给它的文件。我只能假设这是因为filename变量格式不正确。这段代码有什么问题吗?
谢谢,
埃里克
编辑: 看起来输入字符串是“C:\ abc \ build \ Dvv \ ggg.trc”,字符串foo接收的是“C:\ abc \ buivv \ ggg”
答案 0 :(得分:0)
A2T
宏使用堆栈内存空间转换字符串。指针ts
一直有效,直到从函数返回并且它指向的数据被破坏为止。
如果您将返回类型更改为ATL::CString
,那么您可以在那里完成。