VS2013文件在C中打开错误

VS2013文件在C中打开错误,c,C,我使用vs2013 #include <stdio.h> void main(){ FILE *f; char fname[] = "17_1.txt"; if ((f = fopen_s(f,fname, "r+")) == NULL) { fprintf(stdout, "can't open the file\n"); exit(1); } while (!feof(f)) {

我使用vs2013

#include <stdio.h>

void main(){

    FILE *f;
    char fname[] = "17_1.txt";

    if ((f = fopen_s(f,fname, "r+")) == NULL)
    {
        fprintf(stdout, "can't open the file\n");
        exit(1);
    }
    while (!feof(f))
    {
        fscanf_s(f, "%d %s %d %d\n");
        fprintf(stdout, "%d %s %d %d \n");
    }

    fclose(f);
}
#包括
void main(){
文件*f;
char fname[]=“17_1.txt”;
如果((f=fopen_s(f,fname,“r+”)==NULL)
{
fprintf(stdout,“无法打开文件”\n);
出口(1);
}
而(!feof(f))
{
fscanf_s(f,“%d%s%d%d\n”);
fprintf(标准输出,“%d%s%d%d\n”);
}
fclose(f);
}
但错误4错误C4700:使用了未初始化的局部变量“f” 我看到-_-
我必须如何改变

你似乎混淆了
fopen\u s
fopen
fopen_s
的签名为:

errno_t fopen_s( 
   FILE** pFile,
   const char *filename,
   const char *mode 
);
FILE *fopen(const char *restrict filename, const char *restrict mode);
fopen
的签名为:

errno_t fopen_s( 
   FILE** pFile,
   const char *filename,
   const char *mode 
);
FILE *fopen(const char *restrict filename, const char *restrict mode);
您分别使用这两种功能的方式是:

FILE* f = NULL;
errno_t e;

if ((e = fopen_s(&f, fname, "r+")) != 0)
{
    fprintf(stdout, "can't open the file\n");
}
以及:


如果发生错误,
fopen
设置
errno

您将
f
作为参数传递到指定的同一行,也就是在未初始化时使用它。这一行:“while(!feof(f))”feof函数在尝试读取超过文件结尾后才会设置。因此,不应将其用作循环控制元素。这一行:'fscanf_s(f,“%d%s%d%d\n”);'可能会(也可能不会)成功。代码应始终检查scanf系列函数的返回值,以确保操作成功。在这种情况下,因为有4个转换因子,所以返回的值应该是4。任何其他返回值都表示错误,或者如果编译此文件时要启用所有警告,则编译器会告诉您代码中的问题。这一行:“fscanf_(f,”%d%s%d%d\n”);'是说输入/转换4项,但这些项没有列出(代码应该检查fscanf_s()返回的值)为确保4个输入/转换操作成功。强烈建议查找/学习您使用的系统调用的语法。您的编码过程将轻松得多。此外,启用编译器警告会告诉您语法问题。要使用errno\t,代码需要包含头文件。