Обзавелся задачкой, нужно получить имя пользователя и затем его вставить в строку. Вопрос: как это сделать?
Код:
DWORD size = 1024;
char buf[1024];
GetUserName(buf, &size);
char* path;
path = "C:\\Users\\" + buf + "\\Desktop";
cout << path;
Должно получиться так:
C:\Users\Example-PC\Desktop
Но возникают ошибки:
expression must have integral or unscoped enum type
Error C2110 '+': cannot add two pointers
Проблема в том, что Вы пытаетесь сложить указатели, а не строки. Для компилятора нет особой разницы какой этой указатель: char*, int* или некий абстрактный T*. Чтобы выполнять конкатенацию двух сишных нуль-терминированных строк (которые де-факто являются char*) следует использовать функцию strcat. Для Вашего случая нужно завести дополнительный массив (помимо buf), а не просто указатель, и выполнять склейку в него, например:
char path[1024] = "C:\\Users\\";
strcpy(path, buf);
strcpy(path, "\\Desktop");
Также можно воспользоваться функцией sprintf. В любом случае, дополнительно имеет смысл проверять отсутствие выхода за границы выделенной памяти.
Однако, для c++ кода (если это возможно) стоит отказаться от си-строк и использовать типы наподобие std::string, для которых имеются соответствующие перегрузки операторов и можно выполнять конкатенацию просто и очевидно, не отвлекаясь на задачи по контролю памяти. Пример:
std::string path = "C:\\Users\\" + std::string(buf) + "\\Desktop";
cout << path;
Сборка персонального компьютера от Artline: умный выбор для современных пользователей