Как добавить строки?

Я действительно новичок в 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];

Чтобы это работало, вы должны быть уверены, что конечная строка не будет длиннее размера массива.

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