在C中读取和写入64位64位

我有这个超级简单的代码,我读取8个字节的块(我将在代码中稍后加密它们),然后将它们写在一个新文件中。

它运行良好,但最后8个字节没有写入。 知道为什么吗?

#include  #include  #include  #include  int main() { uint64_t data; FILE *input, *output; // create output file output = fopen("output.txt", "w"); // read file input = fopen("test.txt", "rb"); if(input) { while(fread(&data, 8, 1, input) == 1) { fwrite(&data, 8, 1, output); } size_t amount; while((amount = fread(&data, 1, 8, input)) > 0) { fwrite(&data, 1, amount, output); } fclose(input); fclose(output); } return EXIT_SUCCESS; } 

 fread(&data, 8, 1, input) 

尝试将8个字节的一个“项目”读入缓冲区,并返回项目数。 如果从当前位置到EOF少于8个字节,则返回0。

一种可能的解决方案是读取8个项目,而不是1个字节:

 ssize_t amount; while ((amount = fread(&data, 1, 8, input)) > 0) { fwrite(&data, 1, amount, output); } 

在while块中,您可以检查amount是否为8或更少,用于加密方法。