sscanf扫描字符串

今天在扫描字符串的时候出了一个让我意外的事情:

    char *pStr = "[2,等待用户确认]";
    
    int nRetCode = 0;
    char szError[64]={0};
                
    if(2 == sscanf(pStr,"[%d,%s]",&nRetCode,szError))
    {
        cout<<nRetCode <<" "<<szError<<endl;
    }

预期的结果当然是szError中保存的字符串不包含']'了,但是意外哈。

后百度了下,修改如下:

    char *pStr = "[2,等待用户确认]";
    
    int nRetCode = 0;
    char szError[64]={0};
                
    if(2 == sscanf(pStr,"[%d,%[^]]s]",&nRetCode,szError))
    {
        cout<<nRetCode <<" "<<szError<<endl;
    }

早知道sscanf用法有些繁琐,现在知道很实用。下面是百度的一个实例:

#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
    /*
    获取字符串 iios/12DDWDFF@122 中的/和@之间的字符串怎么做
    */
    const char* s = "iios/12DDWDFF@122";
    char buf[20];
    sscanf( s, "%*[^/]/%[^@]", buf );
    printf( "%s\n", buf );
    return 0;
}

自己通常没用到,但是认为和实用的东西:

1. * 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入

2.集合操作 %[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配) 

  %[aB'] 匹配a、B、'中一员,贪婪性

  %[^a] 匹配非a的任意字符,并且停止读入,贪婪性

 

 

转载于:https://www.cnblogs.com/lichengman/archive/2012/12/29/2838519.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值