c - 读取文件时打印随机字符
问题描述
我有一个如下所示的 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;
}
解决方案
就像user3121023已经建议的那样,在 fopen 语句中将“r”更改为“rb”可以解决问题。
推荐阅读
- ansible - 在ansible中的库存字符串之后在文件中附加一行?
- tabulator - 如何更改制表符分页按钮的文本和位置
- python-3.x - 问题酸洗函数的参数,包括使用 python pickle 模块的 datetime
- java - 将两个具有相同元素但不同数据的列表与所有数据合并到一个列表中?
- unity3d - 使用 Canvas 时 UiButton 的大小不正确
- sql - 在 queryExecute() 中使用 REGXP_LIKE
- visual-studio-code - 代号 与 VSCode 一起使用
- vue.js - Vuejs avoid changing data in production mode by using DOM
- sublimetext3 - sublime text 3, C++ 中没有代码输出。我在以前的帖子中尝试过解决方案
- postgresql - 尝试 phppgadmin docker 容器查看主机上的 postgres 数据库:它说登录失败