sscanf()函数的应用:定义一个字符数组,来接收匹配字符串

sscanf()函数是我比较喜欢用的C语言字符串处理函数。

它的原型 百度百科 写道
sscanf() - 从一个字符串中读进与指定格式相符的数据.   
函数原型:   
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'添加在最后,虽然之后的字符依然存在,但是字符串以可以区分开来。

你可能感兴趣的:(scanf)