Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用fread读取16字节块_C - Fatal编程技术网

C 使用fread读取16字节块

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); } 比如说,我的文本文件是“这是一个测试文件,这里有一

我正在编写一些代码,应该一次从输入文件中读取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);

}
比如说,我的文本文件是“这是一个测试文件,这里有一些单词”

它会打印出来

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。顺便说一句,您应该发布真实代码(您实际编译和测试的代码),并且应该发布真实输出(从终端剪切和粘贴)。您发布的代码不会编译,即使编译了也不会生成输出。看见