64位我有這樣的超級簡單的代碼,其中我讀的8個字節的塊(I稍後將在代碼加密它們),然後將它們在一個新的文件寫下來。讀取和寫入64位通過用C
它運行良好,但最後8個字節沒有被寫入。任何想法爲什麼?
#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
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;
}
它是一個文本文件嗎?名字'test.txt'表明這一點。也許有一些換行符不計算,輸入文件的大小不是8字節的倍數。此外,你不應該假設CHAR_BIT == 8或sizeof(uint64_t)== 8 –
是的,它是一個簡單的文本文件,有一些行。它不是8個字節的倍數,應該是?我可能會在這裏錯過一些東西。 sizeof(uint64_t)怎麼能和8不同? –
如果您在使用64位字符的機器上工作,sizeof(uint64_t)可能爲1.如果輸入文件的大小不是8的倍數,那麼您的循環將輸入一次太少,因爲fread返回0當沒有足夠的數據來滿足請求的大小時。 –