如果我向 fclose() 发送空指针会发生什么?

aka*_*roc 1 c

例如:

FILE* file_name;
file_name = fopen("some.txt", "r");  // some.txt isn't exist
if (file_name !=NULL)
  printf("nice");
fclose(file_name);
Run Code Online (Sandbox Code Playgroud)

发生了什么fclose

dbu*_*ush 8

传递NULL指针会fclose触发未定义的行为。

该函数在C 标准fclose7.21.5.1 节中被记录为库函数,并且 7.1.4p1 节规定了有关库函数的以下内容:

除非在后面的详细描述中另有明确说明,否则以下每个语句都适用:如果函数的参数具有无效值(例如函数域之外的值,或者程序地址空间之外的指针, 或空指针,或指向不可修改存储的指针(当相应的参数不是 const 限定时)或具有可变数量参数的函数不期望的类型(提升后),则行为是未定义的

第 7.21.5.1 节没有明确提及NULL传递给 的指针fclose,因此上述声明适用。