2016-03-04 47 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++; 

}