Из ваших пояснений в комментариях вы намеревались записать в файл 100 нулевых байтов.Есть как минимум два, а возможно и три способа сделать это.
Первый - выделить массив из 100 инициализированных нулями байтов и записать следующее:
char zeroes[100] = { 0 };
fwrite(zeroes, sizeof(char) /* == 1 */, sizeof(zeroes), f);
Это нехорошо масштабируется, если вы хотите написать, скажем, 10 000 или 10 000 000 нулевых байтов.Вы также можете сделать это:
char zero = 0;
for (int i = 0; i < 100; ++i) fwrite(&zero, sizeof(char), 1, f);
Это масштабируется лучше, но работает очень плохо, так как всегда эффективнее делать одну большую запись, чем много маленьких записей.Вместо этого вы можете искать более позднюю позицию в файле, а затем записывать только последний байт. В системах POSIX это гарантированно для заполнения ранее неписанной части файла нулями:
char zero = 0;
fseek(f, 99, SEEK_SET);
fwrite(&zero, sizeof(char) /* == 1 */, 1, f);
I , поверьте также дается гарантия заполнения нулядля среды выполнения Windows MSVCRT, но я не могу сразу найти доказательства этого на MSDN (это может сделать хороший вопрос).Если кто-то знает, дают ли Windows или другие версии и / или некоторые версии самого стандарта C эту гарантию или нет, этот ответ можно улучшить.
Конечно, если вы * в системе POSIX и не требуют переносимого кода, вы можете использовать ftruncate()
, что дает такую же гарантию, даже не делая fwrite()
.В Windows есть SetEndOfFile()
, но , эта функция заполняет расширенную часть файла неопределенными значениями , а не нулевыми байтами.