Я пытаюсь добавить узлы в начало связанного списка. Программа просит пользователя ввести количество имен, которые он хочет ввести, поэтому, если я ставлю 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();
}
эй спасибо! он работал после того, как я заменил Damn.data данными temp->. Кроме того, я использовал strcpy вместо strncpy(), поэтому теперь он отлично работает. Но я хотел бы спросить, почему это не работает с Damn.data, казалось мне законным. Есть идеи? – jimo
Поскольку вы не * typedef * ваше определение структуры Damn, это также небольшой блок памяти глобального объема, который не инициализирован. Но ваш новый узел - это сегмент памяти кучи, который дал вам malloc, и находится в указателе * temp *. Ваш исходный код попытался скопировать новую строку в этот бесполезный блок памяти глобального объема, а не в надлежащую кучную память. Если бы вы определили определение структуры Damn, тогда компилятор бы выбросил ошибку в оператор strncpy, и вы бы знали, что строка была неправильной. – cybermike