5

アプリケーションパスを確認しようとしていますが、指定されたパスでない場合は移動してください。コードはしっかりしているように感じますが、正しく機能しません。

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つのメッセージボックスが表示されるとき、パスは同じです...

4

2 に答える 2

10

配列のアドレスを比較しているだけです(明らかに同じになることはありません)。配列に保持されている2つの文字列を比較する場合は、次を使用する必要があります_tcscmp();

if(_tcscmp(pCheck, xPath) != 0){ 
于 2012-11-10T16:48:25.593 に答える
3

TChar配列は、最初の文字へのポインタに減衰します。現在、ポインタが等しいかどうかをチェックしているため、TRUEを取得することはありません。

strcmpTCharには、のような同等のものを使用し_tcscmpます。

_tcscmpはマクロであり、文字のタイプを呼び出すwcscmpか、それに応じて実行します。strcmp

于 2012-11-10T16:48:52.357 に答える