C - 使用fread逐字节读取文件

时间:2015-02-02 01:33:08

标签: c file-io

我正在尝试逐字节读取文件(这很重要因为我必须测量性能)。我似乎无法让恐惧正常运作。现在它只是给我文件的最后一个字节。

这就是我所拥有的:

#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;
}

感谢任何帮助

1 个答案:

答案 0 :(得分:1)

你需要推进指针:

for(i = 0; i < filelen; i++) {
       fread(buffer+i, 1, 1, fileptr); 
}

目前,在每次迭代时,循环都会覆盖前一个字符。毫不奇怪,只有最后一个角色出现。

顺便说一下,你应该在循环后添加一个'\ 0'字符,这将标记字符串的结尾,以便printf()在它之后停止打印。