fopen()中w 和w+的区别

测试代码

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. int main()  
  4. {  
  5.    FILE *fp;  
  6.    fp = fopen("test.txt""w");  
  7. // fp = fopen("testt.txt", "w+");  
  8.    fprintf(fp, "1This is testing for fprintf...\n");  
  9.    fprintf(fp, "2This is testing for fprintf...\n");  
  10.   
  11.    fseek(fp, 0, SEEK_END);  
  12.    long lSize = ftell(fp);  
  13.    rewind(fp);  
  14.   
  15.    char* buf = (char*)malloc(sizeof(char) * lSize);  
  16.    size_t read_size = fread(buf, 1, lSize, fp);  
  17.    if (read_size != lSize) {  
  18.     fputs("Reading Error\n", stderr);  
  19.     exit(3);  
  20.    }  
  21.    printf("Reading Result:\n%s\n", buf);   
  22.    fclose(fp);  
  23.    free(buf);  
  24. }   

如果使用"w",运行结果是

"Reading Error"

如果使用"w+",运行结果是

"Reading Result:

1This is testing for fprintf...
2This is testing for fprintf..."

所以,w的情况下下,只能write不能read,w+的情况下可以write 可以read. 官方文档这么说

"r"read: Open file for input operations. The file must exist.
"w"write: Create an empty file for output operations. If a file with the same name already exists, its contents are discarded and the file is treated as a new empty file.
"a"append: Open file for output at the end of a file. Output operations always write data at the end of the file, expanding it. Repositioning operations (fseekfsetposrewind) are ignored. The file is created if it does not exist.
"r+"read/update: Open a file for update (both for input and output). The file must exist.
"w+"write/update: Create an empty file and open it for update (both for input and output). If a file with the same name already exists its contents are discarded and the file is treated as a new empty file.
"a+"append/update: Open a file for update (both for input and output) with all output operations writing data at the end of the file. Repositioning operations (fseekfsetposrewind) affects the next input operations, but output operations move the position back to the end of file. The file is created if it does not exist.
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值