2012-06-27 3 views
0

Я использую fread для чтения в буфер символов.fread() возвращает количество прочитанных байтов + 1

char buffer[50]; 
int nbytes = fread(buffer, 1, 50, fp); 

файл я прочитал от содержит ровно слово Hello, то есть 5 байт. В приведенном выше примере nbytes равен 6. Почему?

Кроме того, чтение из файла нулевых байт (т.е. он пустой) возвращает 0.

+0

Возможно, это добавление 0-терминалов? –

+2

Имеет ли файл новую строку? –

+1

'fread()' и 'fwrite()' возвращает количество элементов, которые были успешно прочитаны или записаны. Неверно сказать, что они возвращают несколько байтов. Хотя в вашем случае, так как размер элемента равен 1, это то же самое. Но все равно. –

ответ

4

Я думаю, что все, что написало в файл, который вы читаете либо включен перевод строки (если это текстовый файл) или 0 байт после строки. Если вы на Unix, выполните следующую команду:

od -c filename 

Что будет печатать все содержимое файла, включая не-Printables.

Вы также можете запустить:

wc --bytes filename 

Какой будет печатать длину файла в байтах (вместе с именем файла).

+1

попробуйте также 'xxd filename' для получения дополнительной информации. Кроме того, '--bytes' может быть недоступен как аргумент' wc' на всех платформах, предпочитайте '-c' – pb2q

+0

Действительно. Кажется, что * gedit * добавляет новую строку в файл, но не отображает его в редакторе. Благодаря! –