Я написал программу связанного списка, которая хранит элемент данных как void *. при попытке сохранить печать annd с помощью функций scanf/printf, я получаю ошибку сегментации.Сохранение и печать строки в указателе void
определение узла ->
typedef struct node {
struct node *next;
void *data;
}node;
главная функция ->
head=(node *)malloc(sizeof(node));
if (head==NULL){
printf("error in allocation of memory\n");
exit(EXIT_FAILURE);
}
tail=(node*)create(head);
создать функцию ->
void *create(node *current)
{
int user_choice;
while(current){
printf("\nEnter the data:");
scanf("%s",current->data);
printf("stored at %p\n",(void*)current->data);
printf("%s",(char*)current->data);
printf("\nType '1' to continue, '0' to exit:\n");
scanf("%d",&user_choice);
if(user_choice == 1){
current->next=(node*)malloc(sizeof(node));
current=current->next;
}
else{
current->next=NULL;
}
}
return current;
}
может кто-нибудь сказать, что является правильным аргументом для scanf & prinf должен быть ..?
рабочего кода после включения точек, приведенных в ответах ...
void *create(node *current)
{
node *temp;
int user_choice;
while(current){
printf("\nEnter the data:");
current->data=(char*)malloc(10*sizeof(char));
scanf("%s",current->data);
printf("stored at %p\n",(void*)current->data);
printf("%s",(char*)current->data);
printf("\nType '1' to continue, '0' to exit:\n");
scanf("%d",&user_choice);
if(user_choice == 1){
current->next=(node*)malloc(sizeof(node));
}
else{
current->next=NULL;
temp=current;
}
current=current->next;
}
return temp;
}
[Пожалуйста, смотрите эту дискуссию о том, почему не бросить возвращаемое значение 'таНос()' и семьи в 'C'.] (HTTP://stackoverflow.com/q/605845/2173917). –
Когда пользователь нажимает 0, функция возвращает NULL. Есть много ошибок. Пожалуйста, прочитайте книгу, переосмыслите свой код и вернитесь, если у вас возникнут проблемы. –
Когда 'head' равно null, и вы печатаете сообщение об ошибке (которое должно идти в stderr, а не stdout), вы должны сделать что-то другое, кроме продолжения следующей строки, для которой' head' будет не нулевым. Ваша программа имеет неопределенное поведение. –