将值赋给struct数组的问题!
问题描述:
下面的代码是缩写形式,我有两个名为struct INTERFACE和struct node的结构体。 为了我的目的,我有2个节点,第一个节点有两个接口,第二个节点有三个接口。将值赋给struct数组的问题!
我有一个配置文件,我需要读取信息并将其存储在上述结构中。
所以在我的主程序while循环中,我分别使用strtok()fun和store来读取配置文件。 在if循环中(if(strcmp((p,“IP_ADDR_ETH”)== 0),我比较了IP地址令牌并检索了IP地址并存储在每个节点的接口中。 NODE-1表示第一个节点,NODE-2装置第二个节点。 这里我只示出了为第一个节点。
在如果环路I retrive第一节点的IP地址,并将其存储在节点结构的接口的值。 由,
(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));
在while循环,对每个节点,我可以访问界面结构,妥善得到IPADDR值。 但出于侧while循环,如果我打印次e每个节点的接口值,我只得到第二个节点的最后一个接口值,我无法正确地获得每个节点的接口ipaddress。
我的主代码的部分如下,对不起,如果码长为更再,但我给仅仅nessary部,
/* 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));
为什么按预期不打印结构的值。
另外,我想分配标记字符串值到其他字符串使用strcpy()函数。但是当编译分段错误出现时。是否可以使用strcpy()来声明char *字符串并赋值?
我的配置文件,如下所示, [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]
谢谢
阿伦
答
strcmp(p,"IP_ADDR_ETH")
永远因为此时p指向“NODE”。一旦你解决这个问题,它应该可以工作。
请花一些时间阅读[*格式帮助*](http://stackoverflow.com/editing-help)。正确设置问题的格式,以便其他人有机会回答您。 – 2011-03-29 07:48:23