Сравнение двух TCHAR с одинаковым значением приводит к ложному

Я пытаюсь проверить путь к моим приложениям, и если он не указан, переместите его. Я чувствую, что мой код твердый, но он не работает должным образом.

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

Я никогда не получаю сообщение "Новое местоположение". Когда отображаются первые два сообщения, пути равны...

2 ответа

Решение

Вы просто сравниваете адреса массивов (которые, очевидно, никогда не совпадают). Если вы хотите сравнить две строки, содержащиеся в массивах, вы должны использовать _tcscmp();

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

Ваш массив TChar превращается в указатель на первый символ. В настоящее время вы проверяете на равенство указателей, поэтому вы никогда не получите TRUE.

использование strcmp эквиваленты, для TChar, как _tcscmp,

_tcscmp - это макрос, который либо вызывает wcscmp или же strcmp в зависимости от типа персонажей.

Другие вопросы по тегам