struct node
{
char *IPArray[100];
struct node *ptr;
};
typedef struct node NODE;
NODE *head, *first, *temp = 0;
first = 0;
int numofIP;
这是我在链表中的每个节点上都包含字符串的结构。numofIP 是我的链表中字符串或节点的最大数量。
for(int i=0; i<numofIP; i++)
{
head = (NODE *)malloc(sizeof(NODE));
printf("enter the IP addresses:n");
scanf("%s",&head->IPArray[i]);
if(first != 0)
{
temp->ptr = head;
temp = head;
}
else
{
first = temp = head;
}
}
temp->ptr = 0;
temp = first;
这就是我接受输入并将其存储在每个节点中的方式。
while(temp != NULL)
{
printf("%d=> ",temp->IPArray);
temp = temp->ptr;
}
这就是我打印链表的方式。
但问题是我在输出中得到地址。我无法弄清楚。 如何在链表的每个节点中存储字符串?
1.改变
printf("%d=> ",temp->IPArray);
自
printf("%s=> ",temp->IPArray);
您为printf
函数提供了不正确的格式说明符。
2.以 IPArray
为单位为每个char*
分配内存。
但是,正如您提到的,您只需要一个节点中的一个字符串,然后更改 char* IPArray[100]
到char IPArray[100]
char* IPArray[100]
:将创建指向 100 个字符串的指针,稍后您需要为其分配内存。
char IPArray[100]
:将创建 100 个字符的数组,您可以在其中存储特定节点的 IP 地址,并且不需要为此分配单独的内存。
将 while 循环替换为以下循环。它应该有效。和 不要忘记初始化 j=0;
while(temp != NULL)
{
printf("%s=> ",&temp->IPArray[j]);
temp = temp->ptr;
j++;
}