0

我正在使用 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) 说它无法打开我给它的文件。我只能假设这是因为文件名变量的格式不正确。这段代码有什么问题吗?

谢谢,

埃里克

编辑:看起来输入字符串是“C:\abc\build\Dvv\ggg.trc”,而 foo 接收的字符串是“C:\abc\buivv\ggg”

4

1 回答 1

0

A2T宏使用堆栈内存空间转换字符串。指针ts在从函数返回之前一直有效,然后它指向的数据被损坏。

如果您将返回类型更改为ATL::CString,则从那里开始就可以了。

于 2013-06-13T18:00:26.327 回答