为什么尝试从迭代器输出TCHAR[]
会导致访问冲突,我该如何解决却仍然使用迭代器?我不明白怎么了?
struct FileInfo
{
TCHAR path[MAX_PATH];
};
void iter()
{
std::vector<FileInfo> v;
for (int i = 0; i < 5; i++)
v.push_back({ _T("abc") });
for (int i = 0; i < v.size(); i++) {
OutputDebugString(_T("Ok "));
OutputDebugString(v[i].path);
OutputDebugString(_T("\n"));
}
for (auto it = v.begin(); it != v.end(); it++){
OutputDebugString(_T("Bad "));
OutputDebugString((LPTSTR)*it->path); // CAUSES runtime error here
OutputDebugString(_T("\n"));
}
}
最佳答案
*it->path
的计算结果为TCHAR
,而不是TCHAR*
。
将TCHAR
强制转换为LPTSTR
是不正确的。将TCHAR*
强制转换为LPTSTR
是可以的。
您可以使用:
OutputDebugString((LPTSTR)it->path);
要么
OutputDebugString((LPTSTR)(*it).path));
关于c++ - 迭代器访问冲突的原因和解决方案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38320927/