fwrite是向流中写入数据,而fprintf是向流中写入格式数据。两者的共同点为向流中写入数据,至于区别可以看看两者的申明:
- size_t fwrite(
- const void *buffer,
- size_t size,
- size_t count,
- FILE *stream
- );
- int fprintf(
- FILE *stream,
- const char *format [,
- argument ]...
- );
前者fwrite写入流stream中的数据是buffer指定的内容,内容的字节大小分别由size和count两个参数来指定,因此写入流stream中的内容有可能是乱码,但是有效的数据。
后者fprintf写入流stream中的数据则由argument来指定,并且这些argument的内容分别由format指定的格式来显示,因此写入stream的内容通常来说是文本字符流,当然,也允许写入格式乱码。
两者都可以将文本写入流stream中。比如:
fwrite("Hello world!", 1, 12, fp);
与
fprintf(fp, "%s", "Hello world!");
等价。
二、fprintf用法
实例1:
- #include <stdio.h>
- #include <process.h>
- FILE *stream;
- int main( void )
- {
- int i = 10;
- double fp = 1.5;
- char s[] = "this is a string";
- char c = '\n';
- stream = fopen( "fprintf.out", "w" );
- fprintf( stream, "%s%c", s, c );
- fprintf( stream, "%d\n", i );
- fprintf( stream, "%f\n", fp );
- fclose( stream );
- system( "type fprintf.out" );
- }
屏幕输出:
this is a string
10
1.500000
实例2
- #include <stdio.h>
- int main()
- {
- FILE *fp;
- int i=617;
- char* s = "that is a good new";
- fp = fopen("text.dat","w");
- fputs("total",fp);
- fputs(":",fp);
- fprintf(fp,"%d\n",i);
- fprintf(fp,"%s",s);
- fclose(fp);
- return 0;
- }
屏幕输出:
total:617
that is a good new
格式化规定符
%d 十进制有符号整数
%u 十进制无符号整数
%f 浮点数 %s 字符串
%c 单个字符
%p指针的值
%e 指数形式的浮点数
%x, %X 无符号以十六进制表示的整数
%o 无符号以八进制表示的整数
%g 自动选择合适的表示法
参考: