关键词搜索

源码搜索 ×
×

fprintf和fwrite的一点“怪异”现象

发布2013-06-22浏览8768次

详情内容

      我们先来看一个简单的程序:

 

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int a = 0;
  5. int len = sizeof(a);
  6. // 相当于在log1中以文本文件方式输入0
  7. // 文件对应的比特串实际为00110000
  8. FILE *fp1 = fopen("log1", "w");
  9. fprintf(fp1, "%d", a);
  10. fclose(fp1);
  11. // 文件对应的比特串实际为00000000000000000000000000000000
  12. FILE *fp2 = fopen("log2", "wb");
  13. fwrite(&a, len, 1, fp2);
  14. fclose(fp2);
  15. return 0;
  16. }

     同样是为了存一个整数0,log1和log2是不一样的,这是正常的。下面,我们来继续看程序:

 

 

  1. #include<stdio.h>
  2. int main()
  3. {
  4. char c = 'a';
  5. int len = sizeof(c);
  6. FILE *fp1 = fopen("log1", "w");
  7. fprintf(fp1, "%c", c);
  8. fclose(fp1);
  9. FILE *fp2 = fopen("log2", "wb");
  10. fwrite(&c, len, 1, fp2);
  11. fclose(fp2);
  12. return 0;
  13. }

     结果,log1和log2居然是一样的,大家可以思考一下为什么。接着看程序:

 

 

  1. #include<stdio.h>
  2. #include<string.h>
  3. int main()
  4. {
  5. char s[] = "hello world";
  6. int len = strlen("hello world");
  7. FILE *fp1 = fopen("log1", "w");
  8. fprintf(fp1, "%s", s);
  9. fclose(fp1);
  10. FILE *fp2 = fopen("log2", "wb");
  11. fwrite(s, len, 1, fp2);
  12. fclose(fp2);
  13. return 0;
  14. }

     结果,log1和log2居然也是一样的,原因与上类似。

 

     可见,在针对字符和字符串时候,fwrite写了之后,实际上还是文本文件。

 

     我们再看程序:

 

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int a = 9;
  5. int len = sizeof(a);
  6. FILE *fp1 = fopen("log1", "wb");
  7. fwrite(&a, len, 1, fp1);
  8. fclose(fp1);
  9. // fwrite最好不要和"w"混用
  10. FILE *fp2 = fopen("log2", "w");
  11. fwrite(&a, len, 1, fp2);
  12. fclose(fp2);
  13. return 0;
  14. }

     结果,log1和log2完全一样。继续看下面程序:

 

 

  1. #include<stdio.h>
  2. #include<string.h>
  3. int main()
  4. {
  5. char s[] = "hello world";
  6. int len = strlen("hello world");
  7. FILE *fp1 = fopen("log1", "w");
  8. fprintf(fp1, "%s", s);
  9. fclose(fp1);
  10. FILE *fp2 = fopen("log2", "wb");
  11. fwrite(s, len, 1, fp2);
  12. fclose(fp2);
  13. // fwrite最好不要和"w"混用
  14. FILE *fp3 = fopen("log3", "w");
  15. fwrite(s, len, 1, fp3);
  16. fclose(fp3);
  17. return 0;
  18. }

      结果, log1, log2, log3三个文件完全一样。

 

     可见,在写文件时,用什么打开,并不重要,关键是用fprintf还是用fwrite.

 

 

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载