链接列表包含c中的字符串

时间:2016-03-04 05:35:28

标签: c linked-list

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;
}

这就是我打印链表的方式。

但问题是我在输出中获取地址。我无法理解。如何在链表中的每个节点中存储字符串?

2 个答案:

答案 0 :(得分:2)

<强> 1 .Change

printf("%d=> ",temp->IPArray);

printf("%s=> ",temp->IPArray);

您向printf函数提供了错误的格式说明符。

2 。为char*中的每个IPArray分配内存。

但是,正如您所提到的,节点中只需要一个字符串然后更改 char* IPArray[100]char IPArray[100]

char* IPArray[100]:将创建指向100个字符串的指针,以后需要为其分配内存。

char IPArray[100]:将创建100个字符的数组,您可以在其中存储特定节点的IP地址,而无需为此分配单独的内存。

答案 1 :(得分:0)

  

使用以下循环替换 while循环。它应该可以工作。并且   别忘了初始化j = 0;

 while(temp != NULL)
{
    printf("%s=> ",&temp->IPArray[j]);
    temp = temp->ptr;
j++;

}