Размещенный код не может быть вашим реальным кодом. Размещенный код не может быть скомпилирован.
Здесь:
char* message = "Hello World in C language"
^
Missing ;
Здесь:
buffer += 11;
error: assignment to expression with array type
В любом случае, ваша проблема - неправильное понимание snprintf
С http://man7.org/linux/man-pages/man3/fprintf.3p.html у нас есть
Функция snprintf () должна быть эквивалентна sprintf (), с добавлением аргумента n, который устанавливает размер буфера, на который ссылается s. Если n равно нулю, ничего не должно быть записано, а s может быть нулевым указателем. В противном случае выходных байтов, выходящих за n ‑ 1, следует отбрасывать вместо записи в массив , а нулевой байт записывается в конце байтов, фактически записанных в массив.
Так что это значит?
Хорошо, предположим, что у вас есть:
char line[15000];
snprintf(line, 10000, "%s\n", message);
В этом случае в буфере назначения достаточно места, поэтому line
будет
"Hello World in C language\n"
Это все символы от message
плюс '\n'
из строки форматирования.
При изменении кода на:
char line[15];
snprintf(line, 10, "%s\n", message);
Вы будете только получите первые 9 символов указанной строки - таким образом, вы получите следующее значение в line
:
"Hello Wor"
Таким образом, '\n'
был обрезан вместе с частями message
.
Есть много способов добавить это '\n'
- вот один из них:
char line[15];
int n = snprintf(line, 10, "%s\n", message);
if (n > 9)
{
line[8] = '\n';
}
else if (n > 0)
{
line[n-1] = '\n';
}
В вашем случае это приведет к line
:
"Hello Wo\n"