我正在嘗試使用C以二進制模式讀取文件,但它只在緩衝區中存儲了前43個字符。 我想以245字節的組讀取文件。它包含多字符字節和空字符。 這是文件的十六進制內容:爲什麼fread()沒有獲得預期的字節?
323031353037303735393036333130343739332032373231333732534e30323033323545533036303130340000000008557c0000000000693c0000000000000c0000000008557c0000000000693c0000000000000c0000000008557c0000000000693c0000000000000c00001c00001c00001c00000c00000c00000c00001c4d4e202020204942202020204f393920202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202039444b524d4144
這是我的代碼:
char* to_hex(const char* strin) {
char * strout = malloc(2 * strlen(strin) + 1);
int x;
for (x = 0; x < strlen(strin);x++){
sprintf(&strout[x+x],"%02x", (int)(*(unsigned char*)(&strin[x])));
}
strout[2 * strlen(strin)]='\0'
return strout;
}
int main(int argc, char *argv[]) {
FILE * pfinput = fopen("stack.bin", "rb");
int lrec = 245;
char* sbuff = (char *)malloc((lrec + 1) * sizeof(char));
if (pfinput != NULL) {
while (fread (sbuff, 1, lrec, pfinput) > 0){
sbuff[lrec] = '\0';
printf("len=%d hex=%s\n\n", strlen(sbuff), to_hex(sbuff));
}
}
return 0;
}
它返回如下:
len=43 hex=323031353037303735393036333130343739332032373231333732534e3032303332354553303630313034
爲什麼只讀取43個字符而不是245個?
你有其他選擇嗎?
'它包含多字符字節和空字符'。 - 當然,你意識到strlen()是無用的嗎? –