sscanf和sprintf的用法

来源:互联网 发布:php过滤所有的空格 编辑:程序博客网 时间:2024/05/16 23:48

sscanf和sprintf的用法

sscanf和sprintf是scanf和printf家族的一对成员,用于处理和分析字符串非常强大得两个函数,包含在头文件stdio.h中。

1.sscanf()
(1)用法:
                      int sscanf(const char *buffer, const char *format, ...);
(2)说明:sscanf函数和scanf函数很像,只不过是scanf是从控制台下用户自己输入的,而sscanf是从buffer中读取                      数据,而不用用户输入了(相当于用户输入的字符串是buffer)。后面的argument是要存储的位置。在匹                      配的过程中,只要遇到不匹配的情况,sscanf就结束运行。
(3)注意:①sscanf函数返回值的含义是有多少个变量被赋值。
     ② sscanf会将参数str的字符串根据参数format字符串来转换并格式化数据。
     ③返回值成功则返回参数数目,失败则返回-1,错误原因存于errno中。
(4)使用方法:
①常见用法         
char str[100] = {0};sscanf("123456 ", "%s", str);printf("str=%s/n", str);
②取指定长度的字符串
sscanf("123456 ", "%4s", str);printf("str=%s/n", str);
③取到指定字符为止的字符串
sscanf("123456 abcdedf", "%[^ ]s", str);printf("str=%s/n", str);  // 123456
④取仅包含指定字符集的字符串
sscanf("123456abcdedfBCDEF", "%[1-9,a-z]s", str);printf("str=%s/n", str);   //123456abcdedfsscanf("123456BCDEFabcdedf", "%[1-9,a-z]s", str);printf("str=%s/n", str);   //123456
⑤取到指定字符集为止的字符串
sscanf("123456abcdedfBCDEF", "%[^A-Z]s", str);printf("str=%s/n", str);    //123456abcdedf
⑥给定一个字符串"hello, world",仅保留world。(注意:","之后有一空格,%s遇空格停止,加*则是忽略第一个读到的字符串)
sscanf("hello, world", "%*s%s", buf);printf("%s\n", buf);   //world
%*s表示第一个匹配到的%s被过滤掉,即hello被过滤了。如果没有空格则结果为NULL。
(5)实例:
#include <stdio.h>int main(){    const char* s = "123456";    char buf[20];    unsigned int a1, a2, a3;   //注意不能用unsigned char    sscanf( s, "%02x%02x%02x", &a1, &a2, &a3 );    printf( "%02x,%02x,%02x\n", a1, a2, a3 );    return 0;}


2.sprintf()
(1)用法:
          int sprintf(char *buffer,const char *format,...);
(2)说明:sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命                      令行上输出。spritnf 返回值为本次函数调用最终打印到字符缓冲区中的字符数目。其中,第二个参数是                        格式化字符串。
  ①常见的例子之一便是把整数打印到字符串中,如下:
sprintf(s, "%d", 123);   //"123"
 ②可以指定宽度,不足的左边补空格,如下:  
sprintf(s, "%8d%8d", 123, 4567);   //" 123 4567"
 ③也可以左对齐,如下:
sprintf(s, "%-8d%8d", 123, 4567);    //"123 4567"   
(3)使用方法:
除过上述的格式化字符串之外,还有以下的用法:
 ①用于进制转换
可方便得到变量的十六进制和八进制字符序列,通过稍加处理即可得到每一位的值
char arr[100];int b=255;sprintf(arr,"%x",b);     //arr包含"ff" arr[0]='f' arr[1]='f'
 ②用于连接字符串
【可方便连接两个或者多个字符串
char buf[1024];char a[100]="I ";char b[100]="love ";char c[100]="banana."sprintf(buf,"%s%s%s",a,b,c);     //buf 包含"I love banana."




原创粉丝点击