88Ra 2023-03-24 15:11 采纳率: 66.7%
浏览 44
已结题

C语言函数 fopen

fopen函数为啥在VS2022版本上报错 说不安全

img

#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);
    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;
}


  • 写回答

5条回答 默认 最新

  • qzjhjxj 2023-03-24 16:24
    关注

    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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 4月2日
  • 已采纳回答 3月25日
  • 创建了问题 3月24日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分