C 为什么读取文件会有乱码

好为 发布于 2013/11/12 17:14
阅读 1K+
收藏 0
char* file_get_contents(char* filename) {
	FILE* fp = fopen(filename, "rb");
	if(!fp) {
		printf("Can not open the file\n");
		exit(1);
	}
	fseek(fp, 0, SEEK_END);
	long length = ftell(fp);
	char* buffer = malloc(length);
	char c[1024];
	fseek(fp, 0, SEEK_SET);
	while(fgets(c, sizeof(c), fp) != NULL) {
		strcat(buffer, c);
	}
	fclose(fp);
	char* string = buffer;
	return string;
	
}

C 为什么读取文件会有乱码 ? 或者说怎么解决乱码啊
加载中
1
狮子的魂
狮子的魂

请在malloc下面加上一个memset:

char* buffer = malloc(length);
memset(buffer, 0x00, length);

没有清0的内存里面的存储是不确定的, 这个情况strcat会引发很多问题...

要说乱码, 也是指你的文件存储编码和你的输出流终端解码方式不一样导致的...

狮子的魂
狮子的魂
回复 @好为 : malloc分配的内存里面的值是不定的(说不好是哪一个进程的哪一个函数上次留下的数据). 而strcat则是从内存的第一个不为\0的索引处开始追加字符串, 所以没有初始化的内存带来的影响是未知并且是灾难性的. 通常使用memset来清空内存为0......
好为
好为
为什么要用memset 函数呀?
0
PepsiZero
PepsiZero
读文件乱码不管哪种编程语言都会遇到,读之前先看下文件的编码格式在解码
好为
好为
就是内容前面会多出些几其他字符
0
周翼翼
周翼翼
fgets加rb,:-[
0
fish_yufeng
fish_yufeng
看看原来的编码方式
0
此号作废
此号作废
字符数组和字符串不用初始化的吗?
返回顶部
顶部