Сравнение двух 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

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

4

Решение

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

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

Другие решения

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

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

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

2

По вопросам рекламы [email protected]