Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 给结构数组赋值问题!_C - Fatal编程技术网

C 给结构数组赋值问题!

C 给结构数组赋值问题!,c,C,下面的代码是缩写形式,我有两个名为struct INTERFACE和struct node的结构。 出于我的目的,我有2个节点,第一个节点有两个接口,第二个节点有三个接口 我有一个配置文件,需要从中读取信息并将其存储在上述结构中 因此,在我的主程序while循环中,我分别使用strtok()和store读取配置文件。 在if循环中(if(strcmp((p,“IP地址”)==0),我比较了IP地址令牌,检索IP地址并存储在每个节点的接口中。为什么我使用switch case,因为如果节点1表示第

下面的代码是缩写形式,我有两个名为struct INTERFACE和struct node的结构。 出于我的目的,我有2个节点,第一个节点有两个接口,第二个节点有三个接口

我有一个配置文件,需要从中读取信息并将其存储在上述结构中

因此,在我的主程序while循环中,我分别使用strtok()和store读取配置文件。 在if循环中(if(strcmp((p,“IP地址”)==0),我比较了IP地址令牌,检索IP地址并存储在每个节点的接口中。为什么我使用switch case,因为如果节点1表示第一个节点,节点2表示第二个节点。 这里我只显示了第一个节点

在if循环中,我检索第一个节点的IP地址,并将其存储在节点结构的接口值中。 由

在while循环中,对于每个节点,我都可以访问接口结构并正确获取ipaddr值。 但是在while循环之外,如果我打印每个节点的接口值,我只得到第二个节点的最后一个接口值,我无法正确地获得每个节点的接口ipaddress

我的主要代码部分如下,抱歉,如果代码长度再次增加,但我只给出了必要的部分

/* 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));
[/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
谢谢,

阿伦


将永远不会匹配,因为此时p指向“节点”。一旦您解决了该问题,它应该会工作。

请花一些时间阅读。正确设置您的问题的格式,以便其他人有机会回答您的问题。
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
strcmp(p,"IP_ADDR_ETH")