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
浙公网安备 33010602011771号