Comparing two TCHAR's with same value results false

Josh Line picture Josh Line · Nov 10, 2012 · Viewed 16.3k times · Source

I am trying to check my applications path, and if it is not a specified path, then move it. I feel like my code is solid, yet it does not work properly.

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;
    }
}

Even when the file is in the new path it will still result pCheck != xPath

I never get the "New Location" messagebox. When first two messageboxs are displayed, the path's are equal...

Answer

john picture john · Nov 10, 2012

You are just comparing the addresses of the arrays (which obviously are never the same). If you want to compare the two strings held in the arrays you should use _tcscmp();

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