C fread()返回读取字节数+;1.
我使用fread读取字符缓冲区C fread()返回读取字节数+;1.,c,file,io,C,File,Io,我使用fread读取字符缓冲区 char buffer[50]; int nbytes = fread(buffer, 1, 50, fp); 我从中读取的文件正好包含单词Hello,即5个字节。 在上面的示例中,nbytes等于6。为什么? 此外,从零字节文件(即,它是空的)读取时返回0。我猜,无论您正在读取的文件中写入了什么,都会在字符串后面包含一个换行符(如果它是文本文件)或一个0字节。如果您在unix上,请运行以下命令: od -c filename 它将打印文件的全部内容,包括不可
char buffer[50];
int nbytes = fread(buffer, 1, 50, fp);
我从中读取的文件正好包含单词Hello,即5个字节。
在上面的示例中,nbytes
等于6。为什么?
此外,从零字节文件(即,它是空的)读取时返回0。我猜,无论您正在读取的文件中写入了什么,都会在字符串后面包含一个换行符(如果它是文本文件)或一个0字节。如果您在unix上,请运行以下命令:
od -c filename
它将打印文件的全部内容,包括不可打印的内容
您还可以运行:
wc --bytes filename
它将以字节为单位打印文件的长度(以及文件名)。我的猜测是,您正在读取的文件中写入的任何内容都会在字符串后包含一个换行符(如果是文本文件)或一个0字节。如果您在unix上,请运行以下命令:
od -c filename
它将打印文件的全部内容,包括不可打印的内容
您还可以运行:
wc --bytes filename
它将以字节为单位打印文件的长度(以及文件名)。可能是添加了0终止?文件是否包含换行符?
fread()
和fwrite()
返回成功读取或写入的项目数。说它们返回的字节数是不正确的。虽然在您的例子中,由于元素大小是1,所以它是相同的。但仍然如此。可能是添加了0终止符?文件是否包含换行符?fread()
和fwrite()
返回成功读取或写入的项目数。说它们返回的字节数是不正确的。虽然在您的例子中,由于元素大小是1,所以它是相同的。但仍然如此。请尝试xxd文件名
了解更多信息。另外,--bytes
可能不是在所有平台上都可以作为wc
参数使用,更喜欢-c
。似乎gedit正在向文件添加换行符,但没有在编辑器中显示它。谢谢还可以尝试xxd filename
了解更多信息。另外,--bytes
可能不是在所有平台上都可以作为wc
参数使用,更喜欢-c
。似乎gedit正在向文件添加换行符,但没有在编辑器中显示它。谢谢