比较两个具有相同值的 TCHAR 结果为 false



我正在尝试检查我的应用程序路径,如果不是指定的路径,请移动它。我觉得我的代码很坚固,但它无法正常工作。

TCHAR pCheck[MAX_PATH];
TCHAR xPath[MAX_PATH];
GetModuleFileName(NULL,xPath,MAX_PATH);
if(SHGetSpecialFolderPath(HWND_DESKTOP, pCheck, CSIDL_DESKTOP, FALSE)){
    wcscat(pCheck,L"\NewFile.exe");
    MessageBox(NULL,pCheck,NULL,NULL);
    MessageBox(NULL,xPath,NULL,NULL);
    if(pCheck!=xPath){  
        CopyFile(xPath,pCheck,0);
        ShellExecute(0,L"open",pCheck,NULL,NULL,SW_SHOW);
        return 0;
    }else{
        MessageBox(NULL,L"New Location",NULL,NULL); 
        return 0;
    }
}

即使文件在新路径中,它仍然会导致pCheck!= xpath

我永远不会得到"新位置"消息框。显示前两个消息框时,路径相等...

您只是在比较数组的地址(显然永远不会相同)。如果要比较阵列中的两个字符串,则应使用_tcscmp();

if(_tcscmp(pCheck, xPath) != 0){ 

您的TCHAR数组腐烂到指向第一个字符的指针。您当前正在检查指针等式,这就是为什么您永远不会得到 true

使用 strcmp等效物,对tchar,例如 _tcscmp

_tcscmp是,它根据字符的类型调用wcscmpstrcmp

相关内容

  • 没有找到相关文章

最新更新