sscanf解析復雜字符串,雙引號通配符的使用問題


在一段字符串處理時,使用sscanf函數出現問題:

#include <stdio.h>
#include <string.h>

int main(void)
{
    int id = 0;
    char str[32];
    char mode[8];
    char ip[32];

    memset(mode, 0, sizeof(mode));
    memset(ip, 0, sizeof(ip));
    memset(str, 0, sizeof(str));
    strcpy(str, "1,\"IP\",\"192.168.1.1\"");

    /* 1,"IP","192.168.1.1" */
    printf("str = %s\n", str);

    /* \"%s\" */
    sscanf(str, "%d,\"%s\",\"%s\"", &id, mode, ip);

    /* id = 1, mode = IP","192.168.1.1", ip = 1.1" */
    printf("id = %d, mode = %s, ip = %s\n", id, mode, ip);
    
    return 0;
}


要解析的字符串為 1,"IP","192.168.1.1"
經過上述代碼,結果比較奇怪,懷疑是\"%s\"這樣的匹配形式有問題,因為雖然加了雙引號轉義,但是sscanf函數並沒有安裝預想結果來解析;
查了一下資料,找到了一種比較好的解決方法,我比較low,之前並沒有用過通配符,這樣學習了一下
修改后的代碼為

#include <stdio.h>
#include <string.h>

int main(void)
{
    int id = 0;
    char str[32];
    char mode[8];
    char ip[32];

    memset(mode, 0, sizeof(mode));
    memset(ip, 0, sizeof(ip));
    memset(str, 0, sizeof(str));
    strcpy(str, "1,\"IP\",\"192.168.1.1\"");

    /* 1,"IP","192.168.1.1" */
    printf("str = %s\n", str);

    /* \"%[^\"]\" */
    sscanf(str, "%d,\"%[^\"]\",\"%[^\"]\"", &id, mode, ip);

    /* id = 1, mode = IP, ip = 192.168.1.1 */
    printf("id = %d, mode = %s, ip = %s\n", id, mode, ip);
    
    return 0;
}

 這樣顯示的結果就正確了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM