1
我想將節點添加到鏈接列表的開頭。該程序要求用戶輸入他想輸入的姓名的數量,所以如果我輸入3,它應該要求我輸入3個不同的名字並將它們顯示在列表中,而不是該程序重複地輸出相同的名稱。嘗試插入節點,而不是重複的值
struct node{
char data[20];
struct node* link;
}Damn;
struct node* head;
//Insert
void Insert(char p[20]){
struct node* temp = (struct node*) malloc(sizeof(struct node));
strncpy(Damn.data, p);
temp->link = head;
head = temp;
}
//Print
void Print()
{
struct node* temp = head;
while(temp != NULL){
printf(" %s \n", Damn.data);
temp = temp->link;
}
}
//Main
int main(){
head = NULL;
int i, n;
char p[20];
printf("How many names you want to enter\n");
scanf("%d", &n);
for(i=1; i<(n+1); i++){
printf("Enter the %dth name", i);
scanf("%s", p);
Insert(p);
Print();
}
嘿謝謝!它在我用temp-> data替換Damn.data之後起作用。另外,我使用strcpy而不是strncpy(),所以它現在工作的很好。但是,我想問問爲什麼它不與Damn.data合作,似乎對我而言是合法的。任何想法? – jimo 2015-04-03 04:12:52
既然你沒有* typedef *你的Damn結構定義,它也是一個未初始化的全局範圍內存塊。但是你的新節點是malloc給你的一段堆內存,並且在* temp *指針中。您的原始代碼試圖將新字符串複製到無用的全局範圍內存塊中,而不是正確的堆分配塊內存。如果你已經定義了Damn結構體的定義,那麼編譯器會在strncpy語句中拋出一個錯誤,並且你會知道該行是錯誤的。 – cybermike 2015-04-03 09:05:59