gpt4 book ai didi

c - 给结构体数组赋值的问题!

转载 作者:行者123 更新时间:2023-11-30 18:06:30 25 4
gpt4 key购买 nike

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

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

因此,在我的主程序 while 循环中,我使用 strtok() fun 读取配置文件,并分别存储。在 if 循环 (if(strcmp((p,"IP_ADDR_ETH")==0) 中,我比较了 IP 地址 token 并检索 IP 地址并将其存储在每个节点的接口(interface)中。为什么我使用 switch case 因为 if NODE -1 表示第一个节点,NODE-2 表示第二个节点。这里我只显示了第一个节点。

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

(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 循环内,对于每个节点,我可以访问接口(interface)结构并正确获取 ipaddr 值。但是在 while 循环之外,如果我打印每个节点的接口(interface)值,我只能得到第二个节点的最后一个接口(interface)值,我无法正确获取每个节点的接口(interface) ip 地址。

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

/* 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 *string 和 assing 值?

我的配置文件如下,[测试.配置]

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”。一旦你解决了这个问题,它应该可以工作。

关于c - 给结构体数组赋值的问题!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5469373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com