Я пытаюсь создать связанный список в C, и этот пост относится к той части, где я пытаюсь присвоить переменной в структуре строковое значение, которое вводит пользователь.Программа отлично компилируется, но если я использую strcpy () вместо strdup (), то получаю нежелательный вывод.
Программа компилируется нормально и не выдает предупреждений или ошибок.Если используется strdup (), тогда программа работает так, как задумано, но я хотел бы знать, почему она не работает, когда вместо нее используется strcpy ().При передаче строк для имен, когда список печатается, он иногда печатает ноль, а затем завершается или вместо этого выводит «Имя: Имя: Имя: Имя: Имя» или другие подобные непредсказуемые ошибки.Буду признателен за любые другие комментарии или критику, так как я только начинаю изучать язык, спасибо.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct addressBook {
char *name;
int age;
char *phoneNumber;
struct addressBook *next;
};
static struct addressBook *head = NULL;
static struct addressBook *current;
static struct addressBook *createNew;
//function prototypes
void addNode(void);
struct addressBook * createNode(void);
void printAddressBook(void);
void printStats(void);
int main(void)
{
addNode();
addNode();
printAddressBook();
addNode();
addNode();
printAddressBook();
}
struct addressBook * createNode(void)
{
struct addressBook *newNode;
newNode = (struct addressBook *) malloc(sizeof(struct addressBook));
if (newNode == NULL)
{
puts("Memory error");
exit(1);
}
printf("\nEnter persons name: ");
char name[20];
scanf("%s", name);
strcpy(newNode -> name, name); //produces unpredictable results
//newNode -> name = strdup(name); Works fine with strdup
printf("Enter persons age: ");
scanf("%d", &newNode -> age);
printf("Enter persons phone number: ");
char phoneNumber[15];
scanf("%s", phoneNumber);
strcpy(newNode -> phoneNumber, phoneNumber); //produces unpredictable
results
//newNode -> phoneNumber = strdup(phoneNumber); Works fine with strdup
return(newNode);
}
void addNode(void)
{
createNew = createNode();
current = createNew;
current -> next = head;
head = current;
}
void printAddressBook(void)
{
struct addressBook *temp;
temp = head;
while(temp)
{
printf("Name: %s\nAge: %d\nPhoneNumber: %s\n\n\n",
temp -> name,
temp -> age,
temp -> phoneNumber);
temp = temp -> next;
}
}