sizeof(buffer)
равно sizeof(char*)
, что, вероятно, равно 8 (или, возможно, 4).Таким образом, ваш memset
очищает только немного buffer
.Но с вашим использованием fread
необходимо очищать не только buffer
;это временные path
.
Неинициализированные локальные переменные, такие как path
, не инициализируются нулями.Вы можете использовать memset(path, 0, sizeof(path));
, чтобы очистить его - здесь sizeof
работает, потому что path
действительно является массивом - но проще инициализировать его в объявлении: char path[100] = "";
.
, так как fread
не завершает NUL тем, что читает, может быть произвольный мусор, следующий за ним, что делает strcat
неопределенным поведением.На самом деле, strcat
совершенно ненужен и трата циклов.Вы знаете, сколько данных вы прочитали (это len
), поэтому вы точно знаете, где читать следующий блок, и вы можете сделать это напрямую, без временного буфера и без копии.
Для дальнейшего использования, есливы планируете вызвать malloc
, а затем использовать memset
для очистки выделенного региона, вместо этого следует использовать calloc
.Вот для чего это.