strcat
ожидает, что оба аргумента завершены NUL. Судя по всему, operandes_normalises[i]
начинается с MAXCOL - nombre_caracteres
количества '0'
char
с, но за ним не следует терминатор NUL ('\0'
) для указания конца строки.
strcat
будет искать конец строки перед добавлением mes_operandes[i]
к operandes_normalises[i]
. Если символы барахла находятся между '0'
и mes_operandes[i]
, то это ваша проблема - в operandes_normalises[i]
отсутствует терминатор.
Если ненужные символы идут после mes_operandes[i]
, то mes_operandes[i]
- это символ, который не заканчивается NUL.
Распечатайте operandes_normalises[i]
после добавления '0'
в начало строки, чтобы увидеть, так ли это. Судя по всему, я думаю, что есть хороший шанс.
т. Если MAXCOL - nombre_caracteres
равно 5, operandes_normalises[i]
может быть:
"00000random_garble\0" /* just so happens to be a '\0' somewhere in memory */
Поэтому mes_operandes[i]
будет добавлено после ненужных символов.
РЕДАКТИРОВАТЬ: Как я мог бы добавить, strcat
небезопасно, особенно в том, как он используется здесь - нет проверки, чтобы убедиться, что mes_operandes[i]
вписывается в operandes_normalises[i]
.
Попробуйте использовать strncat
, однако обратите внимание, что он записывает n + 1 символов в место назначения. Из справочных страниц:
Если src содержит n или более символов, strncat () записывает n + 1 символов в dest (n из src плюс завершающий нулевой байт). Следовательно, размер dest должен быть как минимум strlen (dest) + n + 1.