一、printf()一族
(1)printf()
int printf(const char *format, ...);
主要用法是以format格式输出到stdout标准输出中。
(2)fprintf()
int fprintf(FILE *stream, const char *format, ...);
相对比printf(),fprintf()不仅可以输出到stderr,stdout等标准输出中,还可以改变流的输出位置。
经常使用的地方:编译或执行一些代码时候,可以将输出信息分别重定向到不同文件中。
(3)sprintf()
int sprintf(char *str, const char *format, ...);
- atoi是一个将字符串转换为数值的函数。并且在遇到字符时截至。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char str[] = "123456";
char str[] = "123a456";
printf("%d\n",atoi(str));
exit(0);
}
-
sprintf()相当于itoa()
可以将多种类型数据综合起来。作为一个串输出。
char buf[1024];
int year = 2014, month = 5, day = 13;
sprintf(buf,"%d-%d-%d",year,month,day);
puts(buf);
// 输出字符串 2014-5-13
(4)snprintf()
int snprintf(char *str, size_t size, const char *format, ...);
- sprintf()有一个缺陷,在将数据以某种格式写入buf时,不能确定其大小,会发生越界。
- 类似于gets()的缺陷,fgets()加入参数size_t size来指定大小。
- snprintf()同样添加一个size参数。但在使用时fgets(),snprintf()依然会存在一种问题,在没有遇到 \n 情况下,每次只能读取size-1个数据,如果需要放到buf里的数据长,是否能满足要求。
二、scanf()问题
int scanf(const char *format, ...);
int fscanf(FILE *stream, const char *format, ...);
int sscanf(const char *str, const char *format, ...);
注意: 在使用scanf()一族函数时,需要注意格式%s的使用,因为不确定目的地址大小,将一个字符串写入时候可能会越界。