Проблема в том, что, принимая во внимание, что read
не добавляет символ NUL
для завершения строки, и вы добавляете его самостоятельно, вы не предоставляете массиву достаточно места для храненияЭто.Поэтому вам просто нужно увеличить размер при создании массива следующим образом:
char c[size+1];
Просто для полноты, вам также следует проверить возвращаемое значение read
, так как оно может быть -1, если естьошибка.
В дальнейшем обнаружил еще пару проблем.У вас есть эта строка:
temp[j][tot + 1] = '\0';
После этого идет цикл
for(j = 0 ; j < index; j++)
Как только цикл завершится, j
выйдет за пределы temp
.И действительно, эта строка должна быть внутри цикла, поскольку вы хотите добавить \0
к каждой строке в temp
.Таким образом, вы должны удалить его и где у вас есть эта строка:
temp[j][k] = '\n';
Добавить эту строку, чтобы завершить строку.
temp[j][k+1] = '\0';
А что касается k
, я не вижулюбой признак того, что он установлен в 0 перед этим циклом.Вы только сбрасываете его на 0 в конце, чтобы первый раз около k
мог содержать любое значение.Переместите k=0
, чтобы быть первым, что происходит в цикле.
Могут быть и другие подобные проблемы - вот где отладка вашего кода с использованием valgrind будет действительно хорошей идеей, поскольку она скажет вам, где этивиды ошибок происходят.