用strtok()解析IP地址

  用strtok()来解析形如192.168.0.115:3333的IP地址。实现这个功能有两个关键点,一是对strtok()的正确使用,二是格式的转换。

#include 
   
   
    
    
#include 
    
    
     
     
#include 
     
     
      
      

#define IP_SZ 20

struct IPAddr {
    unsigned char ip[4];
    unsigned short port;
};

/*对形如192.168.0.115:3333的地址,先用":",把地址分割成两段,
  再用"."逐个分割。*/
int parserIP(const char* ip_str, struct IPAddr* aIPAddr) {
    char *bufIP, *bufPort, *bufIP0, *bufIP1, *bufIP2, *bufIP3;
    bufIP = strtok(ip_str, ":");
    bufPort = strtok(NULL, ":");
    bufIP0 = strtok(bufIP, ".");
    bufIP1 = strtok(NULL, ".");
    bufIP2 = strtok(NULL, ".");
    bufIP3 = strtok(NULL, ".");

    aIPAddr->ip[0] = (unsigned char)atoi(bufIP0);
    aIPAddr->ip[1] = (unsigned char)atoi(bufIP1);
    aIPAddr->ip[2] = (unsigned char)atoi(bufIP2);
    aIPAddr->ip[3] = (unsigned char)atoi(bufIP3);
    aIPAddr->port = atoi(bufPort);

    return 0;
}

/*改进的fgets(),删除末尾的'\n'*/
void Fgets(char *s, int n, FILE * stream) {
    fgets(s, n, stream);
    int len = strlen(s);
    s[len] = '\0';
}

int main()
{
    struct IPAddr IPAd;
    char buf[IP_SZ];
    printf("input a IP address, like 192.168.0.112:2222\n");
    Fgets(buf, IP_SZ, stdin);
    printf("get a IP address:%s\n", buf);
    parserIP(buf, &IPAd);
    printf("after parsering, the IP is:\n");
    printf(" IPAd->ip[0]=%u\n IPAd->ip[1]=%u\n IPAd->ip[2]=%u\n IPAd->ip[3]=%u\n IPAd->port=%u\n",
           IPAd.ip[0], IPAd.ip[1], IPAd.ip[2], IPAd.ip[3], IPAd.port);
   return 0;
}

     
     
    
    
   
   

某次的运行结果为:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值