5.11 标准I/O库_格式化I/O

1. 格式化输出

    执行格式化输出处理的是4个printf函数。

  • #include <stdio.h>
  • int printf(const char *restrict format, ...);
  • int fprintf(FILE *restrict fp, const char *restrict format, ...);

返回值:成功返回输出字符数,出错返回负值

  • int sprintf(char *restrict buf, const char *restrict format, ...);
  • int snprintf(char *restrict buf, size_t n, const char *restrict format, ...);

返回值:成功返回存入数组的字符数,出错返回负值

    printf将格式化数据写到标准输出,fprintf写至指定的流,sprintf将格式化的字符送入数组buf中。sprintf在该数组的尾端自动加一个null字节,但该字节不包括在返回值中。

    注意,sprintf函数可能会造成由buf指向的缓冲区的溢出。为了解决这种缓冲区溢出问题,引入了snprintf函数。在该函数中,缓冲区长度是一个显式参数,超过缓冲区尾端写的任何字符都会被丢弃。如果缓冲区足够大,snprintf函数就会返回写入缓冲区的字符数。与sprintf相同,该返回值不包括结尾的null字节。

    下列4种printf族的变体类似于上面的4种,但是可变参数表(...)代换成了arg。

  • #include <stdarg.h>
  • #include <stdio.h>
  • int vprintf(const char *restrict format, va_list arg);
  • int vfprintf(FILE *restrict fp, const char *restrict format, va_list arg);

返回值:成功返回输出字符数,出错返回负值

  • int vsprintf(char *restrict buf, const char *restrict format, va_list arg);
  • int vsnprintf(char *restrict buf, size_t n, const char *restrict format, va_list arg);

返回值:成功返回存入数组的字符数,出错返回负值

 

2. 格式化输入

    执行格式化输入处理的是三个scanf函数。

  • #include <stdio.h>
  • int scanf(const char *restrict format, ...);
  • int fscanf(FILE *restrict fp, const char *restrict format, ...);
  • int sscanf(const char *restrict buf, const char *restrict format, ...);

返回值:成功返回指定的输入项数,输入出错或在任意变换前已到达文件结尾则返回EOF

    若有一个字符不匹配,则停止后续处理,不再读输入的其余部分。

scanf族也支持函数使用由<stdarg.h>说明的可变参数表。

  • #include <stdarg.h>
  • #include <stdio.h>
  • int vscanf(const char *restrict format, va_list arg);
  • int vfscanf(FILE *restrict fp, const char *restrict format, va_list arg);
  • int vsscanf(const char *restrict buf, const char *restrict format, va_list arg);

返回值:成功返回指定的输入项数,输入出错或在任意变换前已到达文件结尾则返回EOF

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值