为什么这个字符串被神秘地修改了?

时间:2013-12-14 23:47:47

标签: c++ char path-combine

如果答案很简单,请原谅我,但我不知道造成这种情况的原因。 PathCombineA函数以某种方式修改mypath变量。如果您运行该程序,您将看到我的意思。 (你必须链接Shlwapi.lib)

#include <Windows.h>
#include <Shlwapi.h>
#include <iostream>

using namespace std;

int main()
{
    CHAR temp[MAX_PATH];
    CHAR mypath[MAX_PATH]; 

    GetModuleFileNameA(NULL, mypath, MAX_PATH);
    GetTempPathA(MAX_PATH, temp);

    LPSTR name = PathFindFileNameA(mypath);

    cout << mypath << endl;

    PathCombineA(name, temp, name);

    cout << mypath << endl;

    getchar();
    return 0;
}

PathCombineA之前的输出

C:\用户\所有者\桌面\等\调试\ etc.exe


PathCombineA之后的输出

C:\ Users \ Owner \ Desktop \ etc \ Debug \ C:\ Users \ Owner \ AppData \ Local \ Temp \ etc.exe


如果你们知道发生了什么事,请告诉我!

谢谢!

1 个答案:

答案 0 :(得分:1)

PathFindFileNameA返回指向mypath中字符串最后一部分的指针。 然后,将该指针作为PathCombineA的输出参数传递给mystring缓冲区。

如果你不想修改mystring,你需要另一个缓冲区来保存PathCombineA的输出。