sscanf 解析字符串

test.txt中内容如下所示:

eth0|1|192.168.0.2-192.168.0.150
eth2|1|192.168.0.2-192.168.0.150

 

 想要将其中的ip地址等解析出来:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int ret;
    char buff[128];

    FILE *fp = fopen("./test.txt", "r");
    if (fp == NULL) {
        perror("fopen()");
        return -1;
    }

    while (fgets(buff, sizeof(buff), fp) != NULL) {
        char *ifname, *ipv4, *ip_addr_min, *ip_addr_max;
     //其中的m[^]|]起到了类似strstr的作用 ret
= sscanf(buff, "%m[^]|]|%m[^]|]|%m[^]-]-%m[^]\n]", &ifname, &ipv4, &ip_addr_min, &ip_addr_max); printf("ifname %s is ipv4 %s %s-%s\n", ifname, ipv4, ip_addr_min, ip_addr_max); printf("%d\n", ret); free(ifname); free(ipv4); free(ip_addr_min); free(ip_addr_max); } return 0; }

 

 

 输出:

  ifname eth0 is ipv4 0 192.168.0.55-192.168.0.140
  4
  ifname eth2 is ipv4 1 192.168.0.2-192.168.0.150
  4



 

posted on 2019-04-03 15:12  rivsidn  阅读(343)  评论(0)    收藏  举报

导航