首页 新闻 搜索 专区 学院

C语言读取txt文件 文字部分乱码

0
悬赏园豆:5 [已解决问题] 解决于 2020-08-16 17:31

帮忙看下 读取出来的文字全部乱码 数字正常

define _CRT_SECURE_NO_WARNINGS

include<stdio.h>

include<stdlib.h>

void readFile(char*** p, int* line)
{

int totallines = 0;
char buf[1024] = { 0 };
FILE* fp = fopen("C:\\Users\\Desktop\\123.txt", "r");
if (fp == NULL)
{
	return -1;
}
while (fgets(buf,1024,fp))
{
	totallines++;
}
printf("%d", totallines);
//设置指针在文件第一个位置
fseek(fp, 0, SEEK_SET);

char** tmp = (char**)malloc(sizeof(char*) * totallines);
for (int i = 0; i < totallines ; i++)
{
	memset(buf, 0, 1024);

	fgets(buf, 1024, fp);
	
	tmp[i] = (char*)malloc(strlen(buf) + 1);
	memset(tmp[i], 0, strlen(buf) + 1);
	strcpy(tmp[i], buf);
}


*p = tmp;
*line = totallines;
fclose(fp);

}

void test() {
char** p = NULL;
int lines = 0;
readFile(&p, &lines);

for (int i = 0; i < lines; i++) {
	printf("%s", p[i]);
	free(p[i]);
	p[i] = NULL;
}
//释放文件内容
free(p);

}

int main()
{

test();

}

独行侠1111的主页 独行侠1111 | 初学一级 | 园豆:197
提问于:2020-08-14 22:59
< >
分享
最佳答案
0

你是在windows下测试的吧,windows默认gbk编码,所以导致c语言打开文件默认是以gbk的形式打开的,估计你的文件是用utf8保存的,所以导致了乱码,随便用文本工具转成gbk格式即可,还有你的readFile函数返回值声明成void咋还return -1,这啥操作我没懂。

收获园豆:5
SJ2050 | 菜鸟二级 |园豆:261 | 2020-08-15 19:00

乱码肯定是编码不对。
不过我记得Windows的默认编码并不一定是gbk。而是一个叫ansi的东西,这个东西是随着系统的语言有不同的。。。

顾晓北 | 园豆:10819 (专家六级) | 2020-08-16 10:09

@顾晓北: ansi太老了,只支持英文和数字,国内的windows环境默认就是gbk

SJ2050 | 园豆:261 (菜鸟二级) | 2020-08-16 10:12

-1那写错了 解决了谢谢

独行侠1111 | 园豆:197 (初学一级) | 2020-08-16 17:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册