C/C++错误集锦(VS2015):fopen()打开文件fscanf()获取文件内容识别;warning C4566: 由通用字符名称“\u202A”表示的字符不能在当前代码页(936)中表示出来

原文链接:http://www.juzicode.com/cpp-error-vs2015-fopen-fscanf-warning-c4566

错误提示:

fopen()打开文件,fscanf()获取文件内容失败:

//vx:桔子code ; juzicode.com 
#include "stdio.h"
int main(void)
{
	char buff[255];
	printf("开始从文件读取......");
	FILE *fp = fopen("‪1.txt", "r");
	fscanf(fp, "%s", buff);
	printf("从文件读取内容为: %s\n", buff);
	return 0;
}

错误原因:

1、生成后的可执行文件的相同目录下确实存在1.txt文件,但是读取时出错了,导致第9行没有执行到,增加打印内容:

fp为空指针所以程序退出,另外文件名称不是代码第7行的”1.txt”,而是多了个乱码的字符“?1.txt”。

检查编译信息,在第7行存在一条告警内容:

main.cpp(7): warning C4566: 由通用字符名称“\u202A”表示的字符不能在当前代码页(936)中表示出来

从运行结果和告警信息看,第7行的文件名称和实际在该目录下的文件名称并不匹配,多了个\u202A的unicode字符 ,该字符是一中特殊的控制字符,单从显示上是看不出来的,但是实际存在,所以fopen访问的是一个不存在的文件导致运行时出错。

解决方法:

1、删除第7行的文件名称和双引号,手动输入文件名称:

//vx:桔子code ; juzicode.com 
#include "stdio.h"
int main(void)
{
	char buff[255];
	printf("开始从文件读取......");
	//FILE *fp = fopen("‪1.txt", "r");
	FILE *fp = fopen("1.txt","r");
	printf("fp: %d\n", fp);
	printf("文件名称:%s\n", "1.txt");
	fscanf(fp, "%s", buff);
	printf("从文件读取内容为: %s\n", buff);
	return 0;
}


如果本文还没有完全解决你的疑惑,你也可以在微信公众号“桔子code”后台给我留言,欢迎一起探讨交流。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注