VS2019警告 C6387

1

这个挺离谱的,原本写好了之后,我把警告全改好了,没有一点问题,昨天再运行的时候就突然蹦出来这种问题,刚刚看的时候又发现没问题了.......

警告 C6387  “fp”可能是“0”: 这不符合函数“fgetc”的规范。 

警告 C6387  “fp”可能是“0”: 这不符合函数“fclose”的规范。 

int GetMusicNum(char str[])
{
	FILE* fp = nullptr;
	char ch = NULL, temp_str[200];
	int music_num = 0;
	int m = 0, n = 0;

	strcpy_s(temp_str, sizeof(temp_str) / sizeof(temp_str[0]), str);
	strcat_s(temp_str, sizeof(temp_str) / sizeof(temp_str[0]), "\\musiclist");

	if (fopen_s(&fp, temp_str, "rb"))
	{
#ifdef _DEBUG
		printf("Read Path ERROR\n");
#endif // _DEBUG

		exit(0);
	}

	//每读到一个‘\n’歌曲数量++
	while ((ch = fgetc(fp)) != EOF)
	{
		if (ch == '\n')
		{
			music_num++;
		}
	}

	fclose(fp);
	return music_num;
}
ava
慢热友人

2020-8-24

1

虽然离问题发布时间有点长了,不过我知道问题所在.......

这个是vs编译器新的检测机制,给那些需要传入指针的函数做空指针安全检查;

这是提醒你在执行 fgetc和 fclose函数前要做个判断,排除指针为空还传入函数的可能,因为传入空指针 对于一些函数往往是致命的。

比如你这个警报在 fgetc和 fclose前加个 if (fp == nullptr) { return EOF; }就不会出警报了

ava
游戏人生

2021-2-24

嗯,确实是这样。 -  慢热友人  2021-2-24
-1

这应该是你前面的代码有问题。

请帖出来完整的可编译的代码。(删掉无关代码)

ava
慢羊羊

2020-8-24

现在又没有问题了,警告全没了.......我昨天一点代码也没改 -  慢热友人  2020-8-25
@慢热友人 你可以试试 Rebuild,可能警告又会出来。 -  慢羊羊  2020-8-25
@慢羊羊 Rebuild是解决方案资源管理器->右键项目名->重新生成 ?我试了,还是没有警告 -  慢热友人  2020-8-25
@慢热友人 没警告就好。Rebuild 要是没事就没事了。 -  慢羊羊  2020-8-25
@慢羊羊 好的,谢谢 -  慢热友人  2020-8-25
技术讨论社区
相关提问