为什么在vs2019编译经常报错




```#include<stdio.h>
#include<string.h>

#include <stdlib.h>
    
int main()
{
struct MyStruct
    {
    char name[4]  ;
        int id;
        int strp;
    }str[2];
     FILE* fp  ;

 fopen_s(&fp,"C:\\Users\\Administrator\\Desktop\\Autodesk - Maya 2017 Win x64\\op.txt", "wt+") ;

 printf("QINGSHRUU\n");
 
 
     for (int i = 0; i < 2; i++)
{ 
     scanf_s("%s ,%d, %d", str[i].name, &str[i].id, &str[i].strp);
    
    
}
     for (int i = 0; i < 2; i++)
     {
      fprintf_s(fp,"%s ,%d, %d", str[i].name, str[i].id, str[i].strp );
     }
      
fclose(fp);

}

为什么编译经常报错使用vs2019

在VS2019中,第9行的fopen_s函数需要传递三个参数,而第二个参数是文件打开方式。你的代码中第二个参数是文件路径,没有指定文件打开方式,因此编译失败。可以尝试替换成以下代码:

fopen_s(&fp,"C:\\Users\\Administrator\\Desktop\\Autodesk - Maya 2017 Win x64\\op.txt", "w+");

另外,在使用scanf_s函数时,需要将格式字符串中的占位符与参数用逗号隔开,而你的代码中逗号后应该没有空格。可以尝试替换成以下代码:

scanf_s("%s,%d,%d", str[i].name, 4, &str[i].id, &str[i].strp);

最后,在使用fprintf_s函数时,可以在字符串末尾加上换行符,便于区分每个元素。可以尝试替换成以下代码:

fprintf_s(fp,"%s,%d,%d\n", str[i].name, str[i].id, str[i].strp);

修改后的代码如下:

#include<stdio.h>
#include<string.h>

#include <stdlib.h>

int main()
{
    struct MyStruct
    {
        char name[4]  ;
        int id;
        int strp;
    }str[2];
    FILE* fp  ;

    fopen_s(&fp,"C:\\Users\\Administrator\\Desktop\\Autodesk - Maya 2017 Win x64\\op.txt", "w+");

    printf("QINGSHRUU\n");

    for (int i = 0; i < 2; i++)
    {
        scanf_s("%s,%d,%d", str[i].name, 4, &str[i].id, &str[i].strp);
    }
    for (int i = 0; i < 2; i++)
    {
        fprintf_s(fp,"%s,%d,%d\n", str[i].name, str[i].id, str[i].strp );
    }

    fclose(fp);
    return 0;
}

如果还有其他错误,可以参考错误提示信息进行调整。

修改如下,改动处见注释,供参考:

#include<stdio.h>
#include<string.h>
#include <stdlib.h>

int main()
{
    struct MyStruct
    {
        char name[4];
        int id;
        int strp;
    }str[2];
    FILE* fp;
    int err = fopen_s(&fp, "C:\\Users\\Administrator\\Desktop\\Autodesk - Maya 2017 Win x64\\op.txt", "wt+"); //修改
    if (err) // 修改
    {
        perror("C:\\Users\\Administrator\\Desktop\\Autodesk - Maya 2017 Win x64\\op.txt"); // 修改
        return 1;                                                                          // 修改 
    }
    printf("QINGSHRUU\n");

    for (int i = 0; i < 2; i++)
    {
        scanf_s("%s%d%d", str[i].name, 4, &str[i].id, &str[i].strp);    // 修改 
        //scanf_s("%s ,%d, %d", str[i].name, &str[i].id, &str[i].strp); // 修改 
    }
    for (int i = 0; i < 2; i++)
    {
        fprintf_s(fp, "%s ,%d, %d", str[i].name, str[i].id, str[i].strp);
    }
    fclose(fp);
    return 0;
}