sscanf 、sprintf的常见用法

sprintf

功能

把格式化的数据写入某个字符串缓冲区

原型

int sprintf( char *buffer, const char *format, [ argument] … );

参数列表

bufferchar型指针,指向将要写入的字符串的缓冲区。

format:格式化字符串。

[argument]...:可选参数,可以是任何类型的数据。

返回值

返回写入buffer 的字符数,出错则返回-1.

 

sprintf 常见用法

  1.  格式化数字字符串 
    //把整数123打印成一个字符串保存在s中。
    sprintf(s, "%d", 123);   // "123"
    //可以指定宽度,不足的左边补空格:
    sprintf(s, "%8d%8d", 123, 4567); // "     123    4567"
    //当然也可以左对齐:
    sprintf(s, "%-8d%8d", 123, 4567); // "123    4567"
    //也可以按照16进制打印:
    sprintf(s, "%8x", 4567); //小写16进制,宽度占8个位置,右对齐
    sprintf(s, "%-8X", 4568); //大写16进制,宽度占8个位置,左对齐
  2. 控制浮点数打印格式(默认保留小数点后6位)
sprintf(s, "%f", 3.1415926);    // "3.141593"

有时我们希望自己控制打印的宽度和小数位数,这时就应该使用:”%m.nf” 格式,其中m表示打印的宽度,n表示小数点后的位数。

注意:会四舍五入。

sprintf(s, "%10.3f", 3.1415626);   // "     3.142"
sprintf(s, "%-10.3f", 3.1415626);  // "3.142     "
sprintf(s, "%.3f", 3.1415626);     // "3.142"


对于如下代码:

int i = 123;
sprintf(s, "%.3f", i);

其结果是什么? “0.000”。。 
原因是参数压栈时调用者并不知道跟 i 相对应的格式控制符是个”%f”。而函数执行时函数本身则并不知道当年被压入栈里的是个整数,于是保存整数 i 的那4个字节就被强行作为浮点数格式来解释了,导致出错了

sprintf(s, "%.3f", (float)i);     // 结果为 "123.000"

sscanf 

功能

sscanf 读取格式化的字符串中的数据。

sscanf 常见用法

  1. 常见用法
    char buf[512]; 
    sscanf("123456 ", "%s", buf); 
    printf("%s\n", buf);  // "123456"

     

  2. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串
    sscanf("123456 ", "%4s", buf); 
    printf("%s\n", buf);  // "1234"

     

  3. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串
    sscanf("123456 abcdedf", "%[^ ]", buf); 
    printf("%s\n", buf);   // "123456"

     

  4. 取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串
    sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf); 
    printf("%s\n", buf);   // "123456abcdedf"
    
    
    char s[] = "abcdef 1987:10:20";
    char buf[512];
    sscanf(s, "%[a-z0-9, ,:]", buf);   // "abcdef 1987:10:20"

     

  5. 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串
    sscanf("123456abcdedfBCDEF", "%[^A-Z]", buf); 
    printf("%s\n", buf);   // "123456abcdedf"

     

  6. 给定一个字符串”iios/12DDWDFF@122”,获取 / 和 @ 之间的字符串,先将 “iios/”过滤掉,再将非’@’的一串内容送到buf中
    sscanf("iios/12DDWDFF@122", "%*[^/]/%[^@]", buf); 
    printf("%s\n", buf);   // "12DDWDFF" 

     

  7. 给定一个字符串““hello, world”,仅保留world。(注意:“,”之后有一空格)
    sscanf(“hello, world”, "%*s%s", buf); //%*s表示第一个匹配到的%s被过滤掉,即hello被过滤了,如果没有空格则结果为NULL。
    printf("%s\n", buf);   // "world"

     

参考:突然好想晒太阳

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值