Как добавить строки?
Я действительно новичок в C++, и я делаю простую программу
TCHAR CONFIG_NAME[32];
TCHAR CONFIG_PROCESSNAME[32];
int a = GetPrivateProfileString("Injection", "Name", "", CONFIG_DLLNAME, 32, path);
но мне нужно добавить к нему символ *, потому что ему нужен полный путь. в качестве примера, он делает просто
MyDLL.dll
но это нужно делать
C:/folder/anotherfolder/mydog/MyDLL.dll
Я пытался делать
char* DLLLOC = "NULL";
sprintf(DLLLOC, "%s%s", dir, CONFIG_DLLNAME);
но он падает
3 ответа
Проблема в том, что DLLLOC
не было достаточно места для размещения конкатенации строк.
Решение состоит в том, чтобы предварительно выделить большой char
буфер и использовать его вместо этого, как показано ниже.
#define CONFIG_DLLNAME "configdllname"
int main()
{
char str[1024];
const char* dir = "dir";
sprintf(str, "%s%s", dir, CONFIG_DLLNAME);
printf(str);
}
Если длина строк превышает 1024 символа, вы столкнетесь с той же проблемой; добро пожаловать в строковые операции в C.:)
Кроме того, поскольку вы отметили это вопросом C++, есть ли причина, по которой вы не используете std::string
? Это сделает вашу жизнь намного проще.
Использование
wstring DLLLOC(dir);
DLLLOC.append(CONFIG_DLLNAME);
это сохраняется с переполнением буфера (и да, у окон есть ограничение в 255 символов в пути, так что вы можете утверждать позже, чем размер находится в пределах)
Ваш char* DLLLOC
в нем всего пять символов. (4 для букв "NULL" и еще один перед нулевым терминатором (нулевой байт, обозначающий конец строки в C++. Вам нужно убедиться, что char* DLLLOC
указывает на область, достаточно большую, чтобы в нее помещались струны.
Вы можете попробовать выделить пространство динамически:
// c style
char* DLLLOC = malloc(strlen(dir)+strlen(CONFIG_DLLNAME)+1);
// c++ style
char* DLLLOC = new char[strlen(dir)+strlen(CONFIG_DLLNAME)+1];
(Ты можешь использовать sizeof
здесь, если dir
а также config_DLLNAME
являются массивами символов, а не указателями на символы.)
Или вы можете объявить пространство перед рукой:
char DLLLOC[256];
Чтобы это работало, вы должны быть уверены, что конечная строка не будет длиннее размера массива.