猿问

如果加_s会提示错误 1 error C2660: “fopen_s”: 函数不接受 2 个参数?

这是源程序:
// 1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
#define SAFE_DELETE_ARRAY(p) { if (p) {delete []p; p=NULL;}}

#define ROLE_COUNT 5
#define NAME_LEN 20
using std::cin;
using std::cout;
using std::endl;

typedef struct _ROLE
{
int HP;
int level;
char name[NAME_LEN +1];
}ROLE,*LPROLE;
int _tmain(int argc,_TCHAR* argv[])
{
LPROLE role=NULL;
role=new ROLE[ROLE_COUNT];
memset(role,0,sizeof(ROLE)*ROLE_COUNT);
FILE*file=NULL;

if((file=fopen("role.txt","r+"))==NULL)
{
cout<<"角色文件没有找到,角色加载失败!请重新创建角色。"<<endl;
}
else
{
for(int i=0;i<ROLE_COUNT;i++)
fscanf(file,"%d%d%s",
&role[i].HP,&role[i].level,role[i].name);
fclose(file);
}
printf("HP\t等级\t昵称\n");
for(int i=0;i<ROLE_COUNT;i++)
printf("%d\t%d\t%s\n",
role[i].HP,role[i].level,role[i].name);
for(int i=0;i<ROLE_COUNT;i++)
{
cout<<"输入第"<<i+1<<"个角色的HP:"<<endl;
cin>>role[i].HP;
cout<<"输入第"<<i+1<<"个角色的等级:"<<endl;
cin>>role[i].level;
cout<<"输入第"<<i+1<<"个角色的名字:"<<endl;
cin>>role[i].name;
}
for(int i=0;i<ROLE_COUNT;i++)
printf("%d\t%d\t%s\n",
role[i].HP,role[i].level,role[i].name);

if ((file=fopen("role. txt","w+"))==NULL)
{
cout<<"角色文件保存失败!"<<endl;
}
else
{
for (int i=0;i<ROLE_COUNT;i++)
fprintf(file,"%d\t%d\t%s\n",
role[i].HP,role[i].level,role[i].name);

fclose(file);
}
SAFE_DELETE_ARRAY(role);

return 0;
}

运行时出现3个警告(说下 这不是警告级别的问题哦。)
还有就是:1,cpptest.cpp(27) : warning C4996: “fopen”被声明为否决的。2,cpptest.cpp(35) : warning C4996: “fscanf”被声明为否决的。3,cpptest.cpp(55) : warning C4996: “fopen”被声明为否决的。
结果为:角色文件没有找到,角色加载失败!请重新创建角色
HP 等级 level
0 0 0 持续五行0,在出现请输入第一个角色的HP:

繁星点点滴滴
浏览 116回答 2
2回答

斯蒂芬大帝

被声明为否决的 是说编译器认为这个函数是不安全的,你可以不用改.或者用 加后缀_s 的函数

慕娘9325324

警告不是错误,不用管它!
随时随地看视频慕课网APP
我要回答