【问题标题】:Linked list to contain strings in c链表包含 c 中的字符串
【发布时间】:2016-03-04 05:35:27
【问题描述】:
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;
}

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

但问题是我在输出中得到地址。我无法弄清楚。如何在链表的每个节点中存储一个字符串?

【问题讨论】:

  • char *IPArray[100];char IPArray[100];, scanf("%s",&amp;head-&gt;IPArray[i]);scanf("%s", head-&gt;IPArray[i]);, printf("%d=&gt; ",temp-&gt;IPArray);printf("%s=&gt; ",temp-&gt;IPArray);
  • 你的字符数组“char *IPArray[100]”其实是一个字符指针数组,里面存放的是字符地址。

标签: c linked-list


【解决方案1】:

1.改变

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

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

你给printf函数提供了不正确的格式说明符。

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

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

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

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

【讨论】:

    【解决方案2】:

    用以下循环替换您的 while 循环。它应该可以工作。并且 不要忘记初始化 j=0;

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-23
      • 2014-04-17
      • 2020-09-09
      • 1970-01-01
      • 2016-07-23
      • 1970-01-01
      • 2011-01-21
      相关资源
      最近更新 更多