Даже если мы посмотрим на вызов небезопасной и более не поддерживаемой функции gets
, с этим кодом возникнут многочисленные проблемы, начиная с вашей concat
функции:
char* concat(const char *s1, const char *s2)
{
char *result = malloc(strlen(s1) + strlen(s2) + 1);
strcpy(result, s1);
strcat(result, s2);
return result;
}
Вы звонитеconcat
со строкой: buf = concat(buf, lastchars);
, когда buf
не инициализирован.Другими словами:
char *result = malloc(strlen(buf) + strlen(lastwords) + 1);
strcpy(result, buf);
strcat(result, lastwords);
return result;
Что такое strlen(buf)
?Это неопределенное поведение, так как buf
не содержит строку с нулевым символом конца.
Тогда strcpy(result, buf)
также является неопределенным поведением, поскольку buf
не инициализируется.
Затем вы возвращаете result
и присваиваете его обратно в buf
.
Очень трудно расшифровать ваше намерение с помощью этого кода, поэтому я не могу предложить решение - только укажите на многочисленные проблемы.