我正在尝试检查我的应用程序路径,如果它不是指定的路径,则移动它。我觉得我的代码很稳定,但它无法正常工作。
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
我从未收到“新位置”消息框。当显示前两个消息框时,路径是相等的......
答案 0 :(得分:8)
您只是比较阵列的地址(显然从不相同)。如果要比较数组中保存的两个字符串,则应使用_tcscmp();
if(_tcscmp(pCheck, xPath) != 0){
答案 1 :(得分:2)
你的TChar数组衰减成指向第一个字符的指针。你正在检查指针是否相等,这就是你永远不会得到 TRUE 的原因。
为TChar使用strcmp
等效项,例如 _tcscmp
。
_tcscmp是宏,根据字符的类型调用wcscmp
或strcmp
。