Локальные объекты в языке C никогда не инициализируются автоматически. Вы должны предоставить инициализатор. В противном случае объект будет содержать мусор.
Итак, ваш memset
на самом деле не является «избыточным». Тем не менее, правильный способ инициализации буфера для всех нулей -
char buf[1000] = { 0 };
, а не memset
. (Хотя в этом случае memset
также будет работать, почти всегда предпочтительнее использовать функцию основного языка, чем функцию библиотеки).
И да, если вы объявляете свой буфер внутри тела цикла, вы должны каждый раз заново инициализировать его.
Конечно, реальный вопрос заключается в следующем: вам действительно нужен буфер, инициализированный для всех нулей при каждой итерации? Если так, то вы должны делать это каждый раз.