• C语言 sscanf函数补充


    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <assert.h>
    
    /* sscanf特殊用法补充 */
    
    void test()
    {
        const char * p1 = "333<key:value>abcde";
        const char * p2 = "<key:value>abcde";
        int rc = 0;
        char buf1[1024] = { 0 };
        char buf2[1024] = { 0 };
        char buf3[1024] = { 0 };
        int index = 0;
    
        /*
        目标:
            提取<>中的内容
        */
    
        rc = sscanf(p1, "%[^<]<%[^>]>%n%s", buf1, buf2, &index, buf3);
        printf("==11111==rc[%d]==buf1[%s]===buf2[%s]=buf3[%s]===index[%d]=====
    ", rc, buf1, buf2, buf3, index);
        /*
        说明:
            %n获取的是截止到>这个数据的长度,这个长度是相对于源字符串p1,而不是相对于%[^<],%n可以放在任何地方,他就是用来统计到当前位置的长度
    
            特别强调,%n不包括在返回值中,这里rc的值是3,而不是4
        */
    
        //注意点
        memset(buf1, 0, 1024);
        memset(buf2, 0, 1024);
        memset(buf3, 0, 1024);
        index = 0;
        rc = sscanf(p2, "%[^<]<%[^>]>%n%s", buf1, buf2, &index, buf3);
        printf("====2222222==rc[%d]==buf1[%s]===buf2[%s]=buf3[%s]===index[%d]=====
    ", rc, buf1, buf2, buf3, index);
        /*
        强调:
            当匹配p2时,什么都没有匹配到,原因是p2不符合%[^<]这个条件,p2以<开始,所以%[^<]匹配不到任何东西,需要注意这一点
            强调sscanf匹配时,必须能匹配到数据,数据不可以不存在,这一点和正则不同
        */
    
    }
    
    int main(int argc, char *argv[])
    {
        test();
        printf("-----ok------
    ");
        getchar();
        return 0;
    }
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    //sscanf指定检索长度
    
    void test()
    {
        const char* p = "%8888asdas";
        char buf[32] = { 0 };
        int n = 0;
    
        if (sscanf(p, "%%%x", &n))
        {
            printf("---111---[%d]------
    ", n);    //打印‭559242‬,因为提取的十六进制数是8888a
        }
    
        if (sscanf(p, "%%%2x", &n))
        {
            printf("----22--[%d]------
    ", n);    //打印‭136,因为提取的十六进制数是88
        }
    
        //说明: 其他提取方式类同,例如 %3s   表示提取3个字符
    }
    
    int main()
    {
        test();
        return 0;
    }
  • 相关阅读:
    Flash性能相关
    穿过某点绘制曲线
    oracle 动态列
    oracle 失效对象自动重新编译
    EBS 重新编译无效对象 invalid object
    oracle ebs Customer Info
    Oracle Customer Contacts Info
    Report Builder中的页码问题
    APPFND01564 ORA6502,ORA06512 in afscpcon IE 9
    EBS中发送电子邮件
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/11279326.html
Copyright © 2020-2023  润新知