Используя strcat()
, вы работаете в c, а не c ++.
C не собирается автоматически управлять памятью для вас.
c может сбивать с толку, поскольку иногда кажется, что он имеет строковый тип данных, когда все, что он делает - это предоставляет вам строковый интерфейс для массивов символов.
Во-первых, первый аргумент strcat()
должен быть доступен для записи и иметь достаточно места для добавления второй строки.
char *out = strcat("This", "nThat");
просит c топнуть строковую литеральную память.
Как правило, вы НИКОГДА не должны использовать strcat()/sprintf
, как в приведенном выше «выбранном» ответе. Вы можете перезаписать память таким образом. Вместо этого используйте strncat()/snprintf()
, чтобы избежать переполнения буфера. Если вы не знаете, какой размер передать в "n" в strncat()
, вы, вероятно, делаете что-то не так.
Один из способов сделать это в c будет:
#define ERROR_BUF_SIZE 2048 // or something big enough, you have to know in c
char errorInfo[ERROR_BUF_SIZE];
snprintf(errorInfo, ERROR_BUF_SIZE, "Workflow %s ERROR: %s",
workflowToString(workflow).utf8(), errorCode.utf8());
или аналогично, используя strncpy/strncat