为什么尝试从迭代器输出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/

10-10 07:49