C 运行时错误与编译时错误
我们最近参加了一次考试,我们得到了这个问题: 考虑以下代码片段:C 运行时错误与编译时错误,c,compiler-errors,runtime-error,C,Compiler Errors,Runtime Error,我们最近参加了一次考试,我们得到了这个问题: 考虑以下代码片段: FILE * pFile; pFile = open ("myfile.txt","w+"); fprintf (pFile, "%f %s", 3.1416, "PI"); 以下哪项陈述是正确的 A) 程序在编译时生成错误 B) 程序在运行时生成错误 C) D) 我们无法使用编译器,而编写的信息是我们唯一拥有的。 正确的答案是B,运行时出错,有
FILE * pFile;
pFile = open ("myfile.txt","w+");
fprintf (pFile, "%f %s", 3.1416, "PI");
以下哪项陈述是正确的
A) 程序在编译时生成错误
B) 程序在运行时生成错误
C)
D)
我们无法使用编译器,而编写的信息是我们唯一拥有的。
正确的答案是B,运行时出错,有人能给我详细解释一下原因吗
我知道编译器会生成警告,但这里的重点是理解为什么编译器首先让我们编译这段代码,而不是给我们一个错误
我的猜测是,open即使没有返回指针(这是一个地址),也会返回仍然是int的fp,因此在编译器看来,这不是错误的语法,但在运行时,它可能会尝试访问导致错误的私有内存地址
p、 美国。
我知道正确的函数应该是fopen,但这仍然不能解释为什么此代码有两个特定问题:
的第二个参数需要一个open
,但会传递一个int
char*
返回一个open
,但该值被分配给一个int
文件*