concat — Строка конкатенации с const char (результат GetComputerName) в переполнении стека

Необходимость: Объединить результат function GetComputerName (nameBuf) с командой, чтобы открыть Chormium.

Задача: Создайте новый профиль с именем машины, на которой выполняется установка.

проблема: Я не знаю, как я могу выполнить это объединение, которое я пытался выполнить с strcpy а также strcat безуспешно.

Вот мой код:

int WINAPI WinMain(HINSTANCE inst,HINSTANCE prev,LPSTR cmd,int show)
{

//Close phpdesktop.exe
WinExec("taskkill /F /IM phpdesktop.exe", SW_HIDE);
//Sleep
Sleep(500);
//Open phpdesktop.exe mini server
WinExec("phpdesktop.exe -S 127.0.0.1:54007 -t www -c php.ini", SW_HIDE);
//Sleep
Sleep(500);

//Get computer name
TCHAR nameBuf[MAX_COMPUTERNAME_LENGTH + 2];
DWORD nameBufSize;

nameBufSize = sizeof nameBuf - 1;
if (GetComputerName(nameBuf, &nameBufSize) == TRUE)
{
//How to make the concatenation result nameBuf GetComputerName function with the command of Chromium.
WinExec(strcpy("chromium\\ChromiumPortable -app=http://127.0.0.1:54007/ --profile-directory=", nameBuf), SW_HIDE);
}

//Return
return 0;
}

Pastbin: http://pastebin.com/N1eyAfGV

0

Решение

Если вы не хотите использовать второй буфер, попробуйте это

THAR nameBuf[254 + 2]={0};
DWORD nameBufSize;
strcpy(nameBuf,"chromium\\ChromiumPortable -app=http://127.0.0.1:54007/ --profile-directory=");
nameBufSize = sizeof nameBuf - 1;
int index = strlen(nameBuf);
if (GetComputerName(&nameBuf[index], &nameBufSize) == TRUE)
{
WinExec(nameBuf, SW_HIDE);
}
2

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

strcpy в const char * Запускает неопределенное поведение:

std::string s = "chromium\\ChromiumPortable ...";
s += nameBuf;

WinExec(s.c_str(), SW_HIDE);
5

Попытайся:

TCHAR command[1024];
strcpy(command, "chromium\\ChromiumPortable -app=http://127.0.0.1:54007/ --profile-directory=");
strcat(command,nameBuf);
WinExec(command, SW_HIDE);
1
По вопросам рекламы [email protected]