zoukankan      html  css  js  c++  java
  • 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
    ", 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
    ", 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
    ", str);
    
        /* "%[^"]" */
        sscanf(str, "%d,"%[^"]","%[^"]"", &id, mode, ip);
    
        /* id = 1, mode = IP, ip = 192.168.1.1 */
        printf("id = %d, mode = %s, ip = %s
    ", id, mode, ip);
        
        return 0;
    }
    

     这样显示的结果就正确了。

  • 相关阅读:
    oracle的网络服务名和监听程序
    ArcGIS 产品许可模型
    老鸟对菜鸟的一些建议(转)
    ajax简介(转载)
    dim redim
    投影选择的一般原则
    *.prj文件
    cup性能对比感受
    treeview 数据库 递归
    简论两句话
  • 原文地址:https://www.cnblogs.com/hancq/p/5014393.html
Copyright © 2011-2022 走看看