首页 > 解决方案 > 将多行写回文件,文件长度错误

问题描述

我想获取多行文本文件的内容,并将其放回文件中。

但是,我对文件长度有疑问。我添加的空终止符 (0) 在一些奇怪的字符之后。

我的 f_length 有问题吗?

编辑:如果我将文件的行尾设置为 Unix (LF),我没有问题。所以看来我的代码与 Windows 行尾不兼容。如何处理 Windows 文本文件?

int main()
{
    FILE *fp = NULL;
    int f_length;
    char *buffer = NULL;
    size_t size = 0;

    fp = fopen(FILENAME, "r+");
    fseek(fp, 0, SEEK_END);
    f_length = ftell(fp);
    rewind(fp);

    buffer = malloc((f_length + 1) * sizeof(*buffer));      
    fread(buffer, f_length, 1, fp);
    buffer[f_length] = 0;
    printf("%s\n", buffer);

    fp = fopen(FILENAME, "w+");
    fputs(buffer, fp);
    fclose(fp);

    return 0;
}

标签: c

解决方案


改为使用fp = fopen(FILENAME, "rb+");。对于文本文件,您将在阅读时替换换行符(您已经在评论中注意到了这一点)。在某些情况下,新格式更短(“\r”或“\n”,而文件本身包含“\r\n”),因此 f_length 将大于实际读取的数据。

或者您可以使用逐行阅读功能,它们是为文本模式文件设计的。


推荐阅读