Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Comparing two TCHAR's with same value results false

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...

like image 727
Josh Line Avatar asked Nov 10 '12 16:11

Josh Line


2 Answers

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){ 
like image 169
john Avatar answered Sep 21 '22 12:09

john


Your TChar array decays into a pointer to the first character. You are currently checking for pointer equality, which is why you never get TRUE.

Use strcmp equivalents, for TChar, like _tcscmp.

_tcscmp is a macro, which either invokes wcscmp or strcmp depending on the type of characters.

like image 40
Anirudh Ramanathan Avatar answered Sep 19 '22 12:09

Anirudh Ramanathan