sscanf()函数是我比较喜欢用的C语言字符串处理函数。
它的原型 百度百科 写道
sscanf() - 从一个字符串中读进与指定格式相符的数据.
函数原型:
int sscanf( const char *, const char *, ...);
int sscanf(const char *buffer,const char *format,[argument ]...);
buffer 存储的数据
format 格式控制字符串
argument 选择性设定字符串
sscanf会从buffer里读进数据,依照argument的设定将数据写回。
函数原型:
int sscanf( const char *, const char *, ...);
int sscanf(const char *buffer,const char *format,[argument ]...);
buffer 存储的数据
format 格式控制字符串
argument 选择性设定字符串
sscanf会从buffer里读进数据,依照argument的设定将数据写回。
它的返回值 百度百科 写道
成功则返回参数数目,失败则返回0,错误原因存于errno中。
这里我要解释一句,成功返回的是匹配的数量(如"%[0-9]%[^a]",这个规则都满足,则返回2);失败则返回0;还有一种情况,当字符串到尾(即遇到'\0')时,返回-1!
我们可以自己定义一个指定长度的字符数组,将数组首地址传入该函数中,用于接收匹配字符串:
#include <stdio.h> #include <string.h> int main() { char temp[100] = {0}; char str[100] = {0}; int i = 0; i = strlen(str); str[0] = 'a'; str[1] = 'b'; str[2] = 'c'; str[3] = 'd'; str[4] = 'e'; str[5] = 'f'; i = sscanf(str, "%s", temp); printf("sscanf():\t%d\n",i); puts(temp); str[0] = 'g'; str[1] = 'u'; i = sscanf(str, "%[^c]", temp); //注意!!这里不需要将temp中每个元素情况,事实上sscanf()函数会在匹配完成后,在字符串最后自动加一个'\0',用于结束。 printf("sscanf():\t%d\n",i); puts(temp); printf("char\tvalue\n"); for(i=0; i<10; i++) { printf(" %c \t %d\n",temp[i],temp[i]); } getchar(); return 0; }
最后,程序运行结果为:
sscanf(): 1 abcdef sscanf(): 1 gu char value g 103 u 117 0 d 100 e 101 f 102 0 0 0 0
可以看到定义的长度为100的temp字符数组,在第一次匹配之后并没有清空,而继续调用ssacnf()使用,会自动将'\0'添加在最后,虽然之后的字符依然存在,但是字符串以可以区分开来。