我正在尝试读取文件hello.ms,其中包含以下内容:

Hello World!

使用此C代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int store_file(char* file_dir, char** buffer)
{
    FILE* file;
    long lSize;
    size_t result;
    char* tempBuffer;

    file = fopen(file_dir, "r");
    if (file==NULL)
    {
        fputs("File error.", stderr);
        exit(1);
    }

    fseek(file, 0, SEEK_END);
    lSize = ftell(file);
    rewind(file);

    tempBuffer = (char*)malloc(sizeof(char)*lSize);
    if (tempBuffer == NULL)
    {
        fputs("Memory error.", stderr);
        exit(2);
    }

    result = fread(tempBuffer, 1, lSize, file);
    if (result != lSize)
    {
        fputs("Reading error.", stderr);
        exit(3);
    }

    *buffer = tempBuffer;
    free(tempBuffer);
    fclose(file);

    return lSize;
}

void fsa_cycle(char* file_dir)
{
    char* buffer;
    int bufferSize = store_file(file_dir, &buffer);

    fwrite(buffer, sizeof(char), bufferSize, stdout);
}

int main(int argc, char* argv[])
{
    if(argc < 2)
    {
        printf("\nSyntax: %s <file-name>\n\n", argv[0]);
        exit(1);
    }

    fsa_cycle(argv[1]);

    return 0;
}

它编译得很好。没有警告或错误。但是它只输出rld!
当我在hello.ms文件中添加8个空格时,它将读取Hello World!
谁能告诉我为什么会这样吗?我试着写fseek(file,0,SEEK_CUR)而不是倒带,但这也不起作用。我在Google上找不到任何帮助,没有暗示程序员忘了使用fseek来起步。任何帮助都将非常棒!

最佳答案

您正在使用free释放tempBuffer内存,但实际上该内存块已分配给buffer

free 可能与不同的编译器不同,但是我的工作与您一样,只需删除free(tempBuffer);

关于c - fread跳过前8个字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17686062/

10-11 22:12
查看更多