Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

array of structs in c-user input

Tags:

c

I am new to programming in general and to C in particular. I am trying to write a program that uses an array of structs, but I am experiencing problems if that struct contains strings. Somehow the compiler crashes after the user has given the last input.

The struct below is just a simplified version containing only one item, because the problem seems to be reading strings into the array. Any help is much appreciated, thanks in advance.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
    char* name;
}student;

int main()
{
    int size;
    printf("enter number of entries\n");
    scanf("%d" , &size);
    student* all=malloc(size*sizeof(student));

    int i;
    for(i=0;i<size;i++)
    {
        printf("enter name\n");
        scanf("%s" , all[i].name);
    }

    return 0;
}
like image 458
williamsidis Avatar asked Jan 08 '16 13:01

williamsidis


1 Answers

Before taking input scanf("%s" , all[i].name); , you need to allocate memory to all[i].name .

An example-

for(i=0;i<size;i++)
{
    all[i].name=malloc(20*sizeof(*(all[i].name)));
    if(all[i].name!=NULL){
       printf("enter name\n");
       scanf("%19s" , all[i].name);
    }
}
//use these strings
for(i=0;i<size;i++){
       free(all[i].name);                  //free the allocated memory 
}
free(all);

Or in your structure instead of char * ,declare name as a char array (if you don't want to use dynamic allocation)-

typedef struct{
  char name[20];                     //give any desired size
 }student;
/*           no need to free in this case   */
like image 166
ameyCU Avatar answered Sep 18 '22 16:09

ameyCU