Многие компиляторы инициализируют содержимое буфера [20] равным 0. Это особенно верно, если вы инициализируете его с помощью {}
. Вы можете проверить поведение вашего компилятора, используя что-то вроде этого:
#include <stdio.h>
int main() {
char buf1[20] = "foo";
char buf2[20] = {};
int i;
for(i = 0; i < 21; i++ ) {
printf("%02x ", buf1[i]);
}
printf("\n");
for(i = 0; i < 21; i++ ) {
printf("%02x ", buf2[i]);
}
printf("\n");
}
Обратите внимание, что я поставил 21 в условном выражении, а не 20, просто чтобы выдвинуть вывод за пределы фактического выделения буфера.После этого он должен сбросить мусорный байт.