fopen函数为啥在VS2022版本上报错 说不安全
#include
#include
int N, i;
struct XUS
{
char xh[500];
char xm[500];
int cj[3];
};
int main()
{
printf("请输入共几名学生");
scanf_s("%d", &N);
XUS* x = new XUS[N]{};
for (i = 1; i < N + 1; i++)
{
printf("请输入第%d名学生的学号:", i);
scanf_s("%s", &x[i].xh, sizeof(x[i].xh));
printf("请输入第%d名学生的姓名:", i);
scanf_s("%s", &x[i].xm, sizeof(x[i].xm));
printf("请输入第%d名学生的成绩:", i);
scanf_s("%d", &x[i].cj[0]);
scanf_s("%d", &x[i].cj[1]);
scanf_s("%d", &x[i].cj[2]);
printf("\n");
}
FILE* fp;
fopen("xinxi.txt", "w");
if (fp == NULL)
{
printf("不能打开文件\n");
//表示正常退出
}
for (i = 1; i < N + 1; i++)
{
fprintf(fp, "%d ", (int)x[i].xh);
fprintf(fp, "%s ", x[i].xm);
fprintf(fp, "%d ", x[i].cj[0]);
fprintf(fp, "%d ", x[i].cj[1]);
fprintf(fp, "%d ", x[i].cj[2]);
printf("\n");
}
fclose(fp);
return 0;
}
fopen("xinxi.txt", "w"); 这句正确的是:fp = fopen("xinxi.txt", "w"); , 才有后面的if (fp == NULL) , 还有其他的输入输出问题,一并修改如下,供参考:
#include<stdio.h>
#include<stdlib.h>
int N, i;
struct XUS
{
char xh[500];
char xm[500];
int cj[3];
};
int main()
{
printf("请输入共几名学生");
scanf_s("%d", &N);
struct XUS* x = new struct XUS[N]{};
for (i = 0; i < N; i++) //for (i = 1; i < N + 1; i++) 修改
{
printf("请输入第%d名学生的学号:", i + 1); //printf("请输入第%d名学生的学号:", i); 修改
scanf_s("%s", x[i].xh, sizeof(x[i].xh)); //scanf_s("%s", &x[i].xh, sizeof(x[i].xh)); 修改
printf("请输入第%d名学生的姓名:", i + 1); //printf("请输入第%d名学生的姓名:", i); 修改
scanf_s("%s", x[i].xm, sizeof(x[i].xm)); //scanf_s("%s", &x[i].xm, sizeof(x[i].xm)); 修改
printf("请输入第%d名学生的成绩:", i + 1); //printf("请输入第%d名学生的成绩:", i); 修改
scanf_s("%d", &x[i].cj[0]);
scanf_s("%d", &x[i].cj[1]);
scanf_s("%d", &x[i].cj[2]);
printf("\n");
}
FILE* fp;
errno_t err; // 修改
err = fopen_s(&fp, "xinxi.txt", "w"); //fopen("xinxi.txt", "w"); 修改
if (err != 0) //if (fp == NULL) 修改
{
printf("不能打开文件\n");
return 1; //表示正常退出 修改
}
for (i = 0; i < N; i++) //for (i = 1; i < N + 1; i++) 修改
{
fprintf(fp, "%s ", x[i].xh); //fprintf(fp, "%d ", (int)x[i].xh); 修改
fprintf(fp, "%s ", x[i].xm);
fprintf(fp, "%d ", x[i].cj[0]);
fprintf(fp, "%d ", x[i].cj[1]);
fprintf(fp, "%d ", x[i].cj[2]);
printf("\n");
}
fclose(fp);
return 0;
}
跟scanf_s一样,后面加个_s
或者根据提示加个#define
改成:
fopen_s(&fp,"xinxi.txt","w");
两个办法,一个是加上 _s
一个是在编译常数里关掉安全检查
做法:https://blog.csdn.net/qq_43441284/article/details/124870560