C语言读取文件总是读出乱码

DazzlingBeing 2009-05-06 10:54:05
文本文件内容:
User Login
User Login
User Login
读取程序:
FILE *file = fopen("a.txt", "r");
if (file == NULL) return 0;
fseek(file, 0L, SEEK_END);
int fileLength = ftell(file); //此处读出为34,User Login长度10,第一第二2行的/r/n即回车换行总共4.第三行没有换行回车。
if (fileLength == 0) return 0;
fseek(file, 0L, SEEK_SET);
char buf[1024];
fread(buf, sizeof(char), fileLength, file);
buf[fileLength] = '\0';
printf("%s", buf);
打印出来后变成:
User Login
User Login
User Login烫
多了一个字节。这怎么回事?
...全文
694 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ken_sniper 2010-02-22
  • 打赏
  • 举报
回复
mark up 哥们,请不要恶意灌水
chenqiang35 2009-05-06
  • 打赏
  • 举报
回复
是的,在assic里回车只占一个字符
DazzlingBeing 2009-05-06
  • 打赏
  • 举报
回复
2楼是错误的。如果再添加一行仍然有乱码。是ftell得到的长度比fread得到的长度要大导致的。
3楼是正确的。

再问:
但是为什么fread返回的读取长度比用ftell得到的文件长度少了2呢?
是说读取出的字符串把文件中的/r/n缩减成了一个/n吗?(Windows下文件回车是/r/n,linux下只有/n。)我没在linux下试过类似程序。
chenqiang35 2009-05-06
  • 打赏
  • 举报
回复


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *file = fopen("a.txt", "r");
if (file == NULL) return 0;
fseek(file, 0L, SEEK_END);
int fileLength = ftell(file); //此处读出为34,User Login长度10,第一第二2行的/r/n即回车换行总共4.第三行没有换行回车。
printf("fileLength= %d\n", fileLength); //读出的是36,而不是34
if (fileLength == 0) return 0;
fseek(file, 0L, SEEK_SET);
char buf[1024];
fileLength = fread(buf, sizeof(char), 1024, file);
buf[fileLength] = '\0';
printf("fileLength= %d\n %s", fileLength, buf);
return 1;

}
baiwei156 2009-05-06
  • 打赏
  • 举报
回复

#include <iostream>
#include <fstream>

using namespace std;

int main(int argc, char *argv[])
{
FILE *file = fopen("1.txt", "r");
if (file == NULL) return 0;
fseek(file, 0L, SEEK_END);
int fileLength = ftell(file); //此处读出为34,User Login长度10,第一第二2行的/r/n即回车换行总共4.第三行没有换行回车。
if (fileLength == 0) return 0;
fseek(file, 0L, SEEK_SET);
char buf[1024];
fread(buf, sizeof(char), fileLength, file);
buf[fileLength-1] = '\0'; //这里修改,溢出了数组范围了
printf("%s", buf);


system("pause");
return 0;
}

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧