C - 使用 fread 逐字节读取文件
C - Read file byte by byte using fread
我正在尝试逐字节读取文件(这很重要,因为我必须衡量性能)。我似乎无法让恐惧正常工作。现在它只给了我文件的最后一个字节。
这是我的:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv) {
FILE *fileptr;
char *buffer;
long filelen;
int i;
fileptr = fopen(argv[1], "rb");
fseek(fileptr, 0, SEEK_END);
filelen = ftell(fileptr);
rewind(fileptr);
buffer = (char *)malloc((filelen+1)*sizeof(char));
for(i = 0; i < filelen; i++) {
fread(*&buffer, 1, 1, fileptr);
}
printf("File len: %ld\n", filelen);
printf("%s\n",*&buffer);
fclose(fileptr); // Close the file
return 0;
}
感谢任何帮助
您需要将指针前移:
for(i = 0; i < filelen; i++) {
fread(buffer+i, 1, 1, fileptr);
}
目前,在每次迭代中,循环都会覆盖前一个字符。那么只有最后一个字符出现也就不足为奇了。
顺便说一句,你应该在循环后添加一个'\0'字符,这将标记字符串的结束,这样printf()
将在它之后停止打印。
我正在尝试逐字节读取文件(这很重要,因为我必须衡量性能)。我似乎无法让恐惧正常工作。现在它只给了我文件的最后一个字节。
这是我的:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv) {
FILE *fileptr;
char *buffer;
long filelen;
int i;
fileptr = fopen(argv[1], "rb");
fseek(fileptr, 0, SEEK_END);
filelen = ftell(fileptr);
rewind(fileptr);
buffer = (char *)malloc((filelen+1)*sizeof(char));
for(i = 0; i < filelen; i++) {
fread(*&buffer, 1, 1, fileptr);
}
printf("File len: %ld\n", filelen);
printf("%s\n",*&buffer);
fclose(fileptr); // Close the file
return 0;
}
感谢任何帮助
您需要将指针前移:
for(i = 0; i < filelen; i++) {
fread(buffer+i, 1, 1, fileptr);
}
目前,在每次迭代中,循环都会覆盖前一个字符。那么只有最后一个字符出现也就不足为奇了。
顺便说一句,你应该在循环后添加一个'\0'字符,这将标记字符串的结束,这样printf()
将在它之后停止打印。