<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } -->
我们知道 scanf是标准输入函数 ,即他的输入设备是键盘 --”stdio”而 sscanf是什么呢 ?其实他也是一个输入函数 ,当我们在写 C语言的 main经常遇到一下的情况 :
int mian(int argc,char **argv)
{
.
.
.
return 0;
}
假如说我们这个 C文件叫做 main.c
那么我们编译 : gcc main.c -o main -g -Wall
那么将产生 elsf文件 main
于是我们执行该文件 ./main m n
其中 m就是输入参数的个数在本例中为 3和 main.c中的 argc,n和 argv对应 .
那么在 main.c中我们能不能知道 ,或者说控制这两个值呢 ?
答案是肯定的 ,这时就要用到我们的 sscanf()
先来看看 sscanf()的原型
int sscanf(const char *Src,const char *format,const char *Dest)
成功返回 1.
例如 :
#include<stdio.h>
int main(int argc,char **argv)
{
int fd;
char led_no[2]={0};
if((fd=sscanf(argv[1],"%s",led_no)))
printf("ssanf_return_no is %d/n argv[1] is %s/n",fd,led_no);
return 0;
}
以上是常见用法 ,其实 sscanf的作用还远远不止这些 .下来我们慢慢体会 :
(1)取指定长度的字符串 :
#include<stdio.h>
int main(int argc,char **argv)
{
char *src="12345678";
char dest[20]={0};
if(sscanf(src,"%4s",dest)) //取 src中的前四个字符放在 dest中
printf("%s/n",dest);
return 0;
}
执行结果 :1234
(2)从第一个字符开始取到指定的字符为止。
#include<stdio.h>
int main(int argc,char **argv)
{
char *src="12345678 core_rui";
char dest[20]={0};
if(sscanf(src,"%[^_]",dest)) //到 ^后面的 _之前的所有字符都回被复制
printf("%s/n",dest);
return 0;
}
输出结果 :12345678 core
(3)取只包含指定字符集的字符
<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } -->
#include<stdio.h>
int main(int argc,char **argv)
{
char *src="ABCDEFGH1234567 core_rui8 ABCDEFG";
char dest[20]={0};
if(sscanf(src,"%[A-F]",dest)) //只取 A到 F之间的大写字母放在 dest中
printf("%s/n",dest);
return 0;
}
输出 :ABCDEF
注意只会识别靠前的字符 ,后面的是不会理睬的 .
(4)取到指定的字符集为止 .
#include<stdio.h>
int main(int argc,char **argv)
{
char *src="ABCDEFGH1234567 core_rui8 ABCDEFG";
char dest[20]={0};
if(sscanf(src,"%[^1-9]",dest)) //取到数字字符之前
printf("%s/n",dest);
return 0;
}
输出结果 :ABCDEFGH
总结 :^表示之前 ,且优先级最低 .sscanf是一个很好用的函数 .