C 使用fread读取16字节块
我正在编写一些代码,应该一次从输入文件中读取16字节的块。我正在使用fread来实现这一点,但是当我到达文件的最后几个字节时,我遇到了问题C 使用fread读取16字节块,c,C,我正在编写一些代码,应该一次从输入文件中读取16字节的块。我正在使用fread来实现这一点,但是当我到达文件的最后几个字节时,我遇到了问题 size_t bytesread=1; while(bytesread > 0){ bytesread = fread(buffer,16,1,inputfile); buffer[16]='\0'; fprintf("Read in line: "%s"\n,buffer); } 比如说,我的文本文件是“这是一个测试文件,这里有一
size_t bytesread=1;
while(bytesread > 0){
bytesread = fread(buffer,16,1,inputfile);
buffer[16]='\0';
fprintf("Read in line: "%s"\n,buffer);
}
比如说,我的文本文件是“这是一个测试文件,这里有一些单词”
它会打印出来
Read in line: "This is a testfi"
Read in line: "le. Here are som"
Read in line: "e words
are som"
我不明白为什么在阅读最后一行时会增加额外的字符。我知道我正在读取一个16字节的块,但我如何处理最后一个只想读取最后7个字节的块?fread(缓冲区,16,1,输入文件)代码>尝试读取一个16字节的块。如果失败,fread
返回零,表示读取了零个完整块
你不想要这个;你想知道读了多少个字符。因此,使用此代码,尝试读取16个块,每个块一个字节:
bytesread = fread(buffer, 1, 16, inputfile);
在此代码之后,bytesread
包含读取的字节数。您可以使用此选项在最后一个字节读取后放置字符串结束标记:
buffer[bytesread] = '\0';
然后printf(“读入行:\%s\”\n,缓冲区)
将只打印读取的字节,不再打印。使用“bytesread”变量。参考fread文档和示例。是的-为什么[16]有“bytesread”?假设最后一个块小于16字节?然后将不读取任何内容,并且缓冲区[16]='\0'代码>不好。如果您关心字节,您应该尝试读取16个项目,每个项目的大小为1。如果数据没有其他意义,例如struct
,那么您应该只读取1个项目大小16。顺便说一句,您应该发布真实代码(您实际编译和测试的代码),并且应该发布真实输出(从终端剪切和粘贴)。您发布的代码不会编译,即使编译了也不会生成输出。看见