Для начала, если , то это ваш код:
char *name, name_log="log-";
затем name_log
- это символ, не указатель на символ.
Предполагая, что это опечатка, вы не можете добавлять строковые литералы подобным образом. Модификации строковых литералов - неопределенное поведение.
Для строки переменного размера, как, по-видимому, user
, возможно, самый безопасный вариант - выделить еще одну строку, достаточно большую для хранения результата, что-то вроде:
char *name, *name_log = "log-", *ext = ".log";
// Do something to allocate and populate name
char *buffer = malloc (strlen (name_log) + strlen (name) + strlen (ext) + 1);
if (buffer == NULL) {
// Out of memory.
} else {
strcpy (buffer, name_log);
strcat (buffer, name);
strcat (buffer, ext);
// Do something with buffer.
free (buffer);
}
malloc
гарантирует, что у вас будет достаточно места для безопасного выполнения всех строковых операций, достаточно символов для трех компонентов плюс нулевой терминатор.