首页 > 解决方案 > 读取文件时打印随机字符

问题描述

我有一个如下所示的 config.txt 文件:

2
2
[3, 8]
[4, 2]-[12, 7]
[1, 10]-[12, 1]

我正在尝试阅读其内容以供稍后处理。但是,当我尝试我的程序并打印文件内容时,它输出的字符比文件中的字符多,即使我自己终止了字符串。就像程序高估了文件的长度一样。这是 printf 的输出:

2
2
[3, 8]
[4, 2]-[12, 7]
[1, 10]-[12, 1]df

显然这两个字符df不应该在那里。我究竟做错了什么。我用谷歌搜索,但找不到明确的答案。这是我的 C 程序:

#include <stdio.h>
#include <stdlib.h>

void readFile(const char *fileName, char *text);

void readFile(const char *fileName, char *text)
{
    FILE *f;
    long length;

    f = fopen(fileName, "r");
    fseek (f, 0, SEEK_END);
    length = ftell (f);
    fseek (f, 0, SEEK_SET);
    text = malloc(length + 1);
    if(text)
    {
        fread (text, 1, length, f);
    }
    fclose (f);
    text[length] = '\0';

    printf(text);
}

int main(void)
{
    char *fileText;
    readFile("config.txt", fileText);

    return 1;
}

标签: cfilefread

解决方案


就像user3121023已经建议的那样,在 fopen 语句中将“r”更改为“rb”可以解决问题。


推荐阅读