2011-03-29 2 views
0

Le code suivant est raccourci, j'ai deux structurs nommés struct INTERFACE et struct node. Pour mon but j'ai 2 noeuds et le premier noeud ont deux interfaces et le deuxième noeud ont trois interfaces.assignant des valeurs au problème de tableau struct!

J'ai un fichier de configuration à partir duquel j'ai besoin de lire les informations et de les stocker dans les structures ci-dessus. Donc, dans mon programme principal en boucle, j'ai lu le fichier de configuration en utilisant strtok() fun, et enregistrez respectivement. Dans la boucle if (si (strcmp ((p, "IP_ADDR_ETH") == 0), j'ai comparé le jeton d'adresse IP et de récupérer l'adresse IP et de stocker dans les interfaces de chaque nœud. nODE-1 signifie premier noeud, des moyens de nODE-2 second noeud. Here I représenté uniquement pour le premier noeud.

dans le cas boucle I retrive l'adresse IP du premier noeud et le stocker dans la valeur d'interface de structure de noeud. par ,

(node1[i].node_if[a].ip_addr)= p; 
           //strcpy((node1[i].node_if[a].ip_addr),p); 
         printf("Node[%d] interface-eth[%d] address=%s \n\n", i,a,(node1[i].node_if[a].ip_addr)); 

l'intérieur de la boucle while, pour chaque nœud, je peux accéder à la structure d'interface et obtenir ipaddr valeur correctement. Mais à côté de la boucle while, si je suis en train d'imprimer e Les valeurs d'interface de chaque nœud, je ne reçois que la valeur de la dernière interface du second nœud, je ne suis pas capable d'obtenir correctement chaque adresse IP de l'interface des nœuds.

Ma partie du code principal est la suivante, désolé si la longueur de code est plus nouveau, mais je ne donne que partie nessary seulement,

/* Node information structure. */ 
typedef struct node { 
    char name[20]; 
    char val[20]; 
    char OS[10]; 
    int vm_id; 
    int num_if; 
    //char *OS; 
    if_val1 node_if[10]; 
    long int memsize; 
}node1; 

/* Interfaces definition structure. */ 
typedef struct INTERFACE { 
    char *ip_addr; 
    char *netmask; 
    char *gateway; 
} if_val1,if_val2; 

I have the above two structure. 


/* File pointer .*/ 
FILE *f; 


int main() 
{ 

    node1 nodeuse; 
    node1 node1[20]; 
    //if_val1 if_val[10]; 
    if_val1 zero_ifintf; 

    //int a; 
    f=fopen("test.config","r"); 
    if(!f) 
    return 1; 

    while(fgets(string, sizeof(string)-1, f) != NULL) 
    { 
     /* Break into tokens. */ 
     p = string; 
     p = strtok(string, seps); /* Find first token*/ 
     while(p != NULL) 
     { 
     if (strcmp(p,"NODE")==0) 
      { 

      a = atoi (strtok(NULL, seps)); /* Find next token*/ 
      switch (a) 
       { 
       case 1: 
       { 
       int i=0; 
       if(strcmp(p,"IP_ADDR_ETH")==0) 
         { 

          printf("--------------hi1 \n"); 
          int comp,a; 
          printf("------------hi2 \n"); 
          a = atoi (strtok(NULL, seps)); /* Find next token*/ 

          if(a < (node1[i].num_if)) 
          { 
           printf("-------------hi3 \n"); 
           p = strtok(NULL, seps); /* Find next token*/ 
           (node1[i].node_if[a].ip_addr)= p; 
           //strcpy((node1[i].node_if[a].ip_addr),p); 
         printf("Node[%d] interface-eth[%d] address=%s \n\n", i,a,(node1[i].node_if[a].ip_addr)); 
          } 

          printf("---------------------hi4 \n"); 
         } 
        i++; 
       } 
       }} //end of while loop 

     //outside while loop printf 's 

      printf("NODE[%d] INTERFACE-ETH-[%d] ADDRESS: %s \n",1,0,(node1[0].node_if[0].ip_addr)); 
      printf("NODE[%d] INTERFACE-ETH-[%d] ADDRESS: %s \n",1,1,(node1[0].node_if[1].ip_addr)); 
      printf("NODE[%d] INTERFACE-ETH-[%d] ADDRESS: %s \n",2,0,(node1[1].node_if[0].ip_addr)); 
      printf("NODE[%d] INTERFACE-ETH-[%d] ADDRESS: %s \n",2,1,(node1[1].node_if[1].ip_addr)); 
      printf("NODE[%d] INTERFACE-ETH-[%d] ADDRESS: %s \n",2,2,(node1[1].node_if[2].ip_addr)); 

pourquoi les valeurs de structure pas imprimées comme prévu.

également, j'essaye d'assigner la valeur de chaîne tokenized à l'autre chaîne en utilisant la fonction de strcpy(). Mais quand la faute de segmentation de compilation est venue. Est-il possible de déclarer char * string et assing en utilisant strcpy() ?.

mon fichier de configuration comme suit, [test.config]

TYPE VM vm1 
TYPE PM pm1 
NODES 2 
APS 2 
TYPE wired 
NODE-1 NUM_IF 2 
NODE-1 IP_ADDR_ETH-0 10.114.12.1 
NODE-1 IP_ADDR_ETH-1 10.114.12.2 
NODE-1 VM_ID 1 
NODE-1 MEM_SIZE 512 
NODE-1 OS FEDORA 

NODE-2 NUM_IF 3 
NODE-2 IP_ADDR_ETH-0 10.114.14.1 
NODE-2 IP_ADDR_ETH-1 10.114.14.2 
NODE-2 IP_ADDR_ETH-2 10.114.14.3 
NODE-2 VM_ID 2 
NODE-2 MEM_SIZE 1GB 
NODE-2 OS CENTOS 
NODE-2 10.114.12.7 

[/test.config]

Merci,

Arun

+1

Veuillez passer du temps et lisez l '[* aide à la mise en forme *] (http://stackoverflow.com/editing-help). Formatez votre question correctement afin que les autres aient une chance de vous répondre. –

Répondre

0
strcmp(p,"IP_ADDR_ETH") 

ne sera jamais correspond car à ce moment p pointe sur "NODE". Une fois que vous avez réglé cela, cela devrait fonctionner.

Questions connexes