strcat в char []

Я использую argp в программе, и он использует глобально определенный char doc [] для отображения информации о программе.

Помимо информации о программе, я хочу добавить уведомление GPL к этому документу.

Уведомление GPL определяется как const char * (но я бы не отказался изменить его), так как оно используется в нескольких других местах.

Сначала я попробовал это:

static char doc[] = strcat("basic program info", GPLNOTICE);

Но это дает:

error: initializer fails to determine size of ‘doc’

Затем я попытался преобразовать в строки:

static char doc[] = (string("basic program info") + string(GPLNOTICE)).c_str()

Но это дает ту же ошибку

Тогда я подумал, что, возможно, создание Doc Char * тоже подойдет

static char *doc = strcat("basic program info", GPLINFO)

…но это вылетает с ошибкой сегментации

Я пытался преобразовать Уведомление GPL в определение макроса, но ничего не смог с этим поделать

-2

Решение

Причина сбоя этой линии:

strcat("basic program info", GPLINFO)

потому что он пытается изменить константный строковый литерал, который хранится в постоянной памяти, который производит неопределенное поведение. Правильное использование strcat может выглядеть так:

static char buf[1024];
strcpy(buf, "basic program info");
strcat(buf, GPLNOTICE);

Но так как вы программируете в , Вы должны предпочесть использование std::string вместо строк в стиле C:

std::string doc("basic program info");
doc += GPLNOTICE;

Также обратите внимание, что перед использованием их рекомендуется прочитать документацию о таких функциях 🙂

2

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

Других решений пока нет …

По вопросам рекламы [email protected]