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]=====\n", 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]=====\n", rc, buf1, buf2, buf3, index);
    /*
    強調:
        當匹配p2時,什麼都沒有匹配到,緣由是p2不符合%[^<]這個條件,p2以<開始,因此%[^<]匹配不到任何東西,須要注意這一點
        強調sscanf匹配時,必須能匹配到數據,數據不能夠不存在,這一點和正則不一樣
    */

}

int main(int argc, char *argv[])
{
    test();
    printf("-----ok------\n");
    getchar();
    return 0;
}
相關文章
相關標籤/搜索