2016-11-20 88 views
0

確定,所以我需要輸入這樣如何將char保存到多個變量中? Ç

IP_1/MASK IP_2 NUM [NET_1 NET_2 NET3 ... NET_NUM]

例如字符串:

192.168.25.87/24 192.168.26.1 3 192.168.0.0/16 192.0.26.0/16 192.168.26.0/24

然後拆分此字符串爲多個變量(IP_1MASK等)。 我跟着互聯網上的導向如何分割它,我這樣做是這樣的:

int main() 
{ 
    char* IP_1[256],IP_2[256],NET[256][256],character[256]; 
    int MASCA,NUM,i=1,j; 
    char *p; 
    gets(character); 
    p=strtok(character,"/ "); 
    while(p!=NULL) 
    { 
     printf("%s\n",p); 
     p=strtok(NULL,"/ "); 
    } 

所以,這樣做我分裂陣列爲多個元素,但如何能夠將這些元素保存到IP_1MASK IP_2NUM NET_1等等......?

+2

**永遠不要**使用'gets'!幾年前它已從標準中刪除,原因很充分。 – Olaf

+0

目前還不清楚你在問什麼。你的意思是「毀滅」?你所有的變量都有自動存儲器分配,直到'main'結束。你不能「銷燬」變量。 – Olaf

+0

我插入了一些日期(ips),我在第一個/之前寫入的是ip1,在寫入之後/之前寫入的是他的掩碼等。我想將它們保存到變量中,例如我輸入192.111.111.111/24,我的代碼將採用192.111.111.111,並將其插入到ip1和24到mask1中。 – Dafuq

回答

1

有很多方法。
例如,執行如下操作。

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

int main(void){ 
    char IP_1[256], IP_2[256], NET[256][256], line[256], rest[256]; 
    int MASK, NUM, i; 
    char *p; 

    fgets(line, sizeof line, stdin);//gets has already been abolished. 
    //Since the first three elements are fixed, use sscanf 
    if(3 > sscanf(line, "%s %s %d %255[^\n]%*c", IP_1, IP_2, &NUM, rest)){ 
     printf("invalid input\n"); 
     return -1; 
    } 
    if(NULL==(p = strchr(IP_1, '/'))){ 
     printf("invalid input\n"); 
     return -1; 
    } 
    *p = 0;// Replace '/' with '\0' 
    MASK = atoi(p + 1);// convert next '/' to int 

    for(p=strtok(rest, " \n"), i = 0; i < NUM && p; ++i, p=strtok(NULL, " \n")){ 
     strcpy(NET[i], p);//strtok and copy 
    } 
    //test print 
    printf("IP_1:%s\n", IP_1); 
    printf("MASK:%d\n", MASK); 
    printf("IP_2:%s\n", IP_2); 
    for(i = 0; i < NUM; ++i) 
     printf("NET_%d:%s\n", i + 1, NET[i]); 
} 
相關問題