69,381
社区成员
发帖
与我相关
我的任务
分享
FILE *stream;
int const NUMB = 1024 * 63;
char buffer[NUMB] = {0};
stream = fopen(filePath,"rb");
while ( fgets(buffer,NUMB,stream) != 0)
{
printf("%s\n", buffer);
}
fclose(stream);
while ( fread(buffer,NUMB,1,stream) != NULL)
{
printf("%s\n", buffer);
为什么我这么写,这能读取到一点东西啦。也是结束符的问题?#include <stdio.h>
#include <string.h>
FILE *stream;
int const NUMB = 1024 * 63;
char buffer[NUMB] = {0};
char filePath[256];
int r,a;
void HexDump(char *buf,int len,int addr) {
int i,j,k;
char binstr[80];
for (i=0;i<len;i++) {
if (0==(i%16)) {
sprintf(binstr,"%08x -",i+addr);
sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
} else if (15==(i%16)) {
sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
sprintf(binstr,"%s ",binstr);
for (j=i-15;j<=i;j++) {
sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
}
printf("%s\n",binstr);
} else {
sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
}
}
if (0!=(i%16)) {
k=16-(i%16);
for (j=0;j<k;j++) {
sprintf(binstr,"%s ",binstr);
}
sprintf(binstr,"%s ",binstr);
k=16-k;
for (j=i-k;j<i;j++) {
sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
}
printf("%s\n",binstr);
}
}
int main() {
strcpy(filePath,"c:\\windows\\system32\\msimg32.dll");
stream=fopen(filePath,"rb");
if (NULL==stream) {
printf("Can not open file %s!\n",filePath);
return 1;
}
a=0;
while (1) {
r=fread(buffer,1,NUMB,stream);
HexDump(buffer,r,a);
a+=r;
if (r<NUMB) break;
}
fclose(stream);
return 0;
}