printf、fprintf、sprintf的区别
printf:
int printf ( const char * format, … );
针对标准输出的格式化输出语句(将格式化数据打印到标准输出) - stdout(一般是显示器)
fprintf:
int fprintf ( FILE * stream, const char * format, … );
针对所有输出流的格式化输出语句(将格式化数据写入流)- stdout、文件
sprintf:
int sprintf ( char * str, const char * format, … );
把一个格式化的数据,转换成字符串(将格式化数据写入字符串)
返回值:如果成功,将返回写入的字符总数。此计数不包括自动追加到字符串末尾的额外空字符(即不包括\0)。 如果失败,将返回一个负数。
struct S
{
int a;
char arr[6];
float b;
};
int main()
{
struct S s = { 10,"abcde",3.14f };
char buf[20] = { 0 };
//将结构体数据写入到buf中,最终以字符串形式打印,返回值是buf总字符串长度
int len = sprintf(buf, "%d %s %f", s.a, s.arr, s.b);
printf("%s\n", buf); //10 abcde 3.140000
printf("%d\n", len); //17
return 0;
}
scanf、fscanf、sscanf的区别
sacanf:
int scanf ( const char * format, … );
针对标准输入的格式化的输入语句(从标准输入中读取格式化数据) - stdin(一般是键盘)
fscanf:
int fscanf ( FILE * stream, const char * format, … );
针对所有输入流的格式化的输入语句(从流中读取格式化数据) - stdin/文件
sscanf:
int sscanf ( const char * s, const char * format, …);
从一个字符串中读取一个格式化的数据(从字符串中读取格式化数据)
返回值:如果成功,该函数将返回参数列表中成功填充的项数。该计数可以与预期的项目数相匹配,或者在匹配失败的情况下小于预期的项目数(甚至为零)。 如果在成功解释任何数据之前输入失败,将返回EOF。
struct S
{
int a;
char arr[6];
float b;
};
int main()
{
char buf[20] = {"10 abced 3.14f"};
struct S t = { 0 };
//将字符串buf格式化读取到结构体t中,返回值是成功读取的项数
int len2 = sscanf(buf, "%d %s %f", &(t.a), t.arr, &(t.b));
printf("%d %s %f\n", t.a, t.arr, t.b); //10 abcde 3.140000
printf("%d\n", len2); //3
return 0;
}