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",(float)3);