一、函数介绍
函数原型: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 个字符,