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

这就是我所拥有的:

#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()将在其后停止打印。

关于c - C-使用fread逐字节读取文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28269995/

10-11 15:25