Почему эта строка загадочно модифицирована?

Пожалуйста, прости меня, если ответ на этот вопрос прост, но я понятия не имею, что является причиной этого. Функция 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: \ Users \ Владелец \ Desktop \ и т.д. \ Debug \ etc.exe


Вывод после PathCombineA

C: \ Users \ Владелец \ Desktop \ и т.д. \ Debug \ C: \ Users \ Владелец \ AppData \ Local \ Temp \ etc.exe


Если вы, ребята, знаете, что происходит, пожалуйста, скажите мне!

Спасибо!

1 ответ

Решение

PathFindFileNameA возвращает указатель на последнюю часть строки в mypath. Затем вы передаете этот указатель в буфер mystring как выходной параметр PathCombineA.

Если вы не хотите, чтобы mystring был изменен, вам понадобится еще один буфер для хранения вывода PathCombineA.

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