printf, fprintf, sprintf,snprintf 区别

时间:2022-09-14 02:23:43

1.4种格式化输出区别

  printf,fprintf,sprintf都是格式化输出命令,它们的用法与区别可以通过Linux中命令“man printf”来查看。
  int printf(const char *format,***)将格式输出到stdout
  int fprintf(FILE *steam,const char *format,***)格式化输出到文件流中,即写入文件
  int sprintf(char *str,const char *format,***)格式化输出到字符串str中,注意此时需要预先给str分配足够大的空间。sprintf最常用的场景是将整数转换为字符串,可替代atoi函数。
  int snprintf(char *str,size_t n,const char *format,*** )格式化输出到字符串str中,但是只写入长度为n的输出。

2.格式化输出时的注意事项

  sprintf()在转换整数时,需考虑输出数的格式,如

sprintf(str,"%4x",-1);

str的值是多少呢?时间测试会发现,str为FFFFFFFF而不是4位宽的FFFF。因为函数参数在入栈计算机并不知道-1是32位的还是16位的,就会按照 32位来存储,并且高位是符号位扩展,当格式化输出时,4位宽不够,就会自动补到32位,所以正确的形式应是:

sprintf(str,"%4x",(unsigned short)-1);

同理,若是输出整数以浮点数格式输出,写作:

sprintf(str,"%5.3x",3);

则最终str为0.000,因为计算机存储3时是按整数形式存储,按浮点数输出必然出错。应为

sprintf(str,"%5.3x",(float3);