C 语言中的 sscanf 详解

本文详细介绍了C语言中的sscanf函数,包括其功能、返回值和使用示例。通过一系列实验展示了sscanf如何与正则表达式结合,以及如何避免内存越界问题。实验内容涵盖不同格式化输入的处理,强调了限制处理长度的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、函数介绍

函数原型int sscanf(const char *str, const char *format, ...);

返 回 值:成功返回匹配成功的模式个数,失败返回 -1。

RETURN VALUE

  • These functions return the number of input items successfully matched and assigned, which can be fewer than provided for, or even zero in the event of an early matching failure.
    这些函数返回成功匹配和赋值的输入项的数目,这个数目可能比提供的要少,或者在早期匹配失败的情况下甚至为零。

  • The value EOF is returned if the end of input is reached before either the first successful conver‐sion or a matching failure occurs.
    如果在第一次成功转换或匹配失败之前到达输入结束,则返回 EOF 值。

举 例

iRet = sscanf("123ab", "%[0-9]%[a-z]", sz1, sz2); // iRet = 2, sz1 = "123", sz2 = "ab"
iRet = sscanf("123ab", "%[0-9]%[A-Z]", sz1, sz2); // iRet = 1, sz1 = "123"
iRet = sscanf("123ab", "%[a-z]%[a-z]", sz1, sz2); // iRet = 0
iRet = sscanf("", "%[a-z]", sz1); 			 	  // iRet = -1

二、sscanf函数和正则表达式

备注:实验五有所纠正。

此文所有的实验都是基于下面的程序:

char str[10] = "!!!!!!!!!!"; // 10 个感叹号

我们把 str 的每个字符都初始化为感叹号,当 str 的值发生变化时,使用 printf 打印 str 的值,对比先前的感叹号,这样就可以方便的观察 str 发生了怎样的变化。

下面我们做几个小实验,看看使用 sscanf 和正则表达式格式化输入后,str 有什么变化。

实验一

(void)sscanf("123456", "%s", str);			// str 的值变为 "123456\0!!!"

这个实验很简单,把源字符串 "123456" 拷贝到 str 的前 6 个字符,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值