【C语言】标准库常用格式化输入输出函数:sprintf、sscanf

以下是 C 标准库中常用的 格式化输入输出函数 的说明:


一、格式化输出函数

1. printf

int printf(const char *format, ...);
  • 功能:将格式化的数据输出到标准输出(通常是终端/控制台)。
  • 参数
    • format:格式字符串,包含普通字符和格式说明符(如 %d, %s 等)。
    • ...:要输出的变量列表,与 format 中的格式说明符一一对应。
  • 返回值
    • 成功:返回实际写入的字符数(不包括终止符 \0)。
    • 错误:返回负数。

2. fprintf

int fprintf(FILE *stream, const char *format, ...);
  • 功能:将格式化数据输出到指定的文件流(如 stdout, stderr, 或打开的文件)。
  • 参数
    • stream:目标输出流(例如 stdout, stderr, 或 FILE* 文件指针)。
    • format:格式字符串。
    • ...:变量列表。
  • 返回值
    • 成功:返回实际写入的字符数。
    • 错误:返回负数。

3. sprintf

int sprintf(char *str, const char *format, ...);
  • 功能:将格式化数据写入字符串 str
  • 参数
    • str:用于存储输出结果的目标缓冲区。
    • format:格式字符串。
    • ...:变量列表。
  • 返回值
    • 成功:返回写入 str 中的字符数(不包括终止符 \0)。
    • 错误:返回负数。
  • ⚠️ 注意:sprintf 不检查缓冲区大小,容易导致缓冲区溢出。建议使用 snprintf 替代。

4. snprintf

int snprintf(char *str, size_t size, const char *format, ...);
  • 功能:安全版本的 sprintf,最多写入 size 个字符到 str
  • 参数
    • str:目标缓冲区。
    • size:缓冲区大小(包括终止符 \0 的空间)。
    • format:格式字符串。
    • ...:变量列表。
  • 返回值
    • 如果输出长度小于 size,则返回写入的字符数(不含终止符)。
    • 如果输出长度 >= size,则返回应写的字符数(不包括终止符),表示被截断。

二、格式化输入函数

5. scanf

int scanf(const char *format, ...);
  • 功能:从标准输入读取格式化数据,并将其存储到变量中。
  • 参数
    • format:格式字符串,描述输入格式(如 %d, %s 等)。
    • ...:变量地址列表,用于接收解析后的数据。
  • 返回值
    • 成功:返回成功赋值的输入项数量。
    • 失败或遇到 EOF:返回 EOF

6. fscanf

int fscanf(FILE *stream, const char *format, ...);
  • 功能:从指定的文件流(如文件)中读取格式化数据。
  • 参数
    • stream:输入流(例如 stdin, 或通过 fopen 打开的文件)。
    • format:格式字符串。
    • ...:变量地址列表。
  • 返回值
    • 成功:返回成功赋值的输入项数量。
    • 失败或遇到 EOF:返回 EOF

7. sscanf

int sscanf(const char *str, const char *format, ...);
  • 功能:从字符串 str 中提取格式化数据。
  • 参数
    • str:源字符串。
    • format:格式字符串。
    • ...:变量地址列表。
  • 返回值
    • 成功:返回成功赋值的输入项数量。
    • 失败或没有匹配:返回 0。
    • 遇到 EOF:返回 EOF

三、变参形式函数(支持可变参数列表)

这些函数接受一个 va_list 类型的参数,用于处理可变参数列表,适用于封装自己的日志或打印函数。

8. vprintf

int vprintf(const char *format, va_list ap);
  • 输出到标准输出,使用 va_list

9. vfprintf

int vfprintf(FILE *stream, const char *format, va_list ap);
  • 输出到指定流,使用 va_list

10. vsprintf

int vsprintf(char *str, const char *format, va_list ap);
  • 写入字符串,使用 va_list。⚠️ 不检查缓冲区大小。

11. vsnprintf

int vsnprintf(char *str, size_t size, const char *format, va_list ap);
  • 安全版本的 vsprintf,限制写入字符数。

总结对比表:

函数名输入/输出目标类型是否安全支持变参
printf输出标准输出
fprintf输出文件流
sprintf输出字符串
snprintf输出字符串
scanf输入标准输入
fscanf输入文件流
sscanf输入字符串
vprintf输出标准输出
vfprintf输出文件流
vsprintf输出字符串
vsnprintf输出字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值