2016-03-04 48 views
2
struct node 
{ 
    char *IPArray[100]; 
    struct node *ptr; 
}; 
typedef struct node NODE; 

NODE *head, *first, *temp = 0; 

first = 0; 

int numofIP; 

这是我的结构,用于在链接列表中的每个节点上包含字符串。 numofIP是我的链接列表中的最大数量的字符串或节点。在c中包含字符串的链接列表

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

这就是我如何打印链表。

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

+0

'字符* IPArray [100];'→'炭IPArray [100];','的scanf( “%S”,&头戴式> IPArray [I]);'→'的scanf(” %s“,head-> IPArray [i]);'''printf(”%d =>“,temp-> IPArray);'→'printf(”%s =>“,temp-> IPArray);' –

+0

[不要在C中抛出malloc的结果](http://stackoverflow.com/q/605845/995714) –

+0

你的字符数组“char * IPArray [100]”实际上是一个字符指针数组。它存储字符地址。 –

回答

2

.Change

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

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

你给不正确格式说明printf功能。

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

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

char* IPArray[100]:将创建的指针,而您稍后需要分配内存100串。

char IPArray[100]:将创建100个字符的阵列,您可以在其中存储特定节点的IP地址,并且不需要为此分配单独的内存。

0

更换你while循环具有以下loop.It应该work.And 不要忘了初始化J = 0;

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

}