C中的缓冲区故障

时间:2011-10-17 22:09:52

标签: c

我尝试写一个缓冲区,这样我就可以在文件中删除很多空的“00”字符。角色没用,完全是随机的。他们正在对该计划中的搜索者造成严重破坏。下面的代码编译,但只是在文件传递给它时似乎挂起。任何建议都会有所帮助。

void ReadFile(char *name)
{
    FILE *dbg;
    char *buffer;
    unsigned long fileLen;

    //Open file
    dbg = fopen(dbg, "w+");
    if (!dbg)
    {
        fprintf(stderr, "Unable to open file %s", name);
        return;
    }

    //Get file length
    fseek(dbg, 0, SEEK_END);
    fileLen = ftell(dbg);
    fseek(dbg, 0, SEEK_SET);

    //Allocate memory
    buffer = (char *)malloc(fileLen+1);
    if (!buffer)
    {
        fprintf(stderr, "Memory error!");
        fclose(dbg);
        return;
    }

    //Read file contents into buffer
    fread(buffer, fileLen, 1, dbg);
    for(i = fileLen-1; i >= 0 && buffer[i] == 0; i--);  
    i++;
    if (i > 0)
    {
        fwrite(buffer, 1, i, dbg);
    }
    fclose(dbg);

    //Do what ever with buffer

    free(buffer);
}

2 个答案:

答案 0 :(得分:2)

更改

dbg = fopen(dbg, "w+");

dbg = fopen(name, "w+");

另外,如果您想要读取文件,更改它然后写入,则不应使用"w+"打开它。您应首先使用"r"打开文件,从中读取,根据需要进行任何更改,然后fclose,然后再次打开它,但这次使用"w"以便您对其进行书写。在"w" rite模式下打开它后,您可以将修改后的缓冲区写回文件中。

答案 1 :(得分:2)

您打开了一个文件进行写作,然后尝试从中读取。

检查fread和所有其他来电的返回值。