VS2013文件在C中打开错误
我使用vs2013VS2013文件在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)) {
#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,代码需要包含头文件。