c语言:fwrite什么都不做

Its*_*lia 2 c fwrite

{
FILE* f1 = fopen("C:\\num1.bin", "wb+");//it will create a new file 
int A[] = { 1,3,6,28 }; //int arr
fwrite(A, sizeof(A), 1, f1); //should insert the A array to the file
}
Run Code Online (Sandbox Code Playgroud)

我确实看到了文件但是即使在fwrite之后,文件仍然是空的(0字节)有没有人知道为什么?

Gra*_*tly 7

您需要关闭该文件 fclose

否则写缓冲区不会(必然)强制将文件内容写入磁盘

  • 或者`fflush(f1);` (5认同)
  • 如果程序正常退出,则应关闭文件流,因此应刷新缓冲区([C11 §7.22.4.4 `exit` 函数¶4](https://port70.net/~nsz/c/ c11/n1570.html#7.22.4.4p4) 和 [C11 §5.1.2.2.3 程序终止](https://port70.net/~nsz/c/c11/n1570.html#5.1.2.2.3)) 。 (2认同)

Gov*_*mar 5

有几件事:

  1. 正如@Grantly上面正确指出的那样,您在写入文件时fclosefflush之后缺少调用.如果没有这个,任何缓存/挂起的写入都不一定会实际写入打开的文件.
  2. 你不检查的返回值fopen.如果fopen因任何原因失败,它将返回NULL指针而不是有效的文件指针.既然你直接写入到驱动器C的根目录:\ Windows平台上,这东西你肯定希望被检查(不,你不应该在其他情况下,不是,但在普通用户帐户运行位置通常写保护).