-1

guys... can u help me apply malloc in my code... here's my code:

#include<stdio.h>
#include<stdlib.h>
struct studentinfo{
       char id[8];
       char name[30];
       char course[5];
}s1;
main(){
    int i;
    FILE *stream = NULL;
    stream = fopen("studentinfo.txt", "a+");

    struct studentinfo s1;
    struct studentinfo array[3];
    for (i =0; i<1; i++){
       printf("Enter Student ID: ");
       scanf("%s", s1.id);
       fflush(stdin);
       printf("Enter Student Name: ");
       gets(s1.name);
       fflush(stdin);
       printf("Enter Student Course: ");
       scanf("%s", s1.course);

       fprintf(stream, "\n%s,\t%s,\t%s", s1.id, s1.name, s1.course);
    }
       fclose(stream);
    getch();
}

i know malloc alots more space than the usual array... but still im having a hard time using it... thanks a lot :)

Fred Foo
  • 342,876
  • 71
  • 713
  • 819
iamanapprentice
  • 415
  • 5
  • 18
  • 36

4 Answers4

3

Before we help you, be sure to do this:

Then:

  • Tell us what you want to achieve;
  • Tell us what's actually happening;
  • Tell us what you've tried;
  • Tell us what's bothering you;
  • Tell us what you don't understand.

Compiler and program outputs help as well.

PS: Sort of expecting a down-vote, but that needed to be done.

Community
  • 1
  • 1
haylem
  • 22,019
  • 3
  • 66
  • 93
0

I think you're at the same institution as @newbie. Newbie, however, made an attempt himself and asked sensible questions.

Have a look at Am i using malloc properly?

Community
  • 1
  • 1
The Archetypal Paul
  • 40,359
  • 19
  • 100
  • 131
0
#include<stdio.h>
#include<stdlib.h>
struct studentinfo{
       char id[8];
       char name[30];
       char course[5];
};
main(){
    int i;
    FILE *stream = NULL;
    stream = fopen("studentinfo.txt", "a+");

    struct studentinfo * s1 = (struct studentinfo *)malloc(sizeof(struct studentinfo));    

    struct studentinfo * array = (struct studentinfo *)malloc(sizeof(struct studentinfo) * 3);
    for (i =0; i<1; i++){
       printf("Enter Student ID: ");
       scanf("%s", s1->id);
       fflush(stdin);
       printf("Enter Student Name: ");
       gets(s1->name);
       fflush(stdin);
       printf("Enter Student Course: ");
       scanf("%s", s1->course);

       fprintf(stream, "\n%s,\t%s,\t%s", s1->id, s1->name, s1->course);
    }
       fclose(stream);
    getch();
}

BTW:
- fflush(stdin) is not portable.
- gets() is dangerous, replace it with fgets()

Huang F. Lei
  • 1,765
  • 14
  • 23
  • Thou shall not cast the malloc return value: http://en.wikipedia.org/wiki/Malloc#Casting_and_type_safety . Also, prefer sizeof(*s1) to sizeof(struct studentinfo), as it prevents you from having to re-edit the sizeof if you change the type of your variable. Pointers are your friends. – haylem Dec 03 '10 at 13:37
0

you don't need to use malloc in your example because you know how many students you'll have at design (I guess, because you for loop ends at a fixed value). When you will know it only at run time, you can:

studentinfo *array;     // declare it as a pointer

// get the number of students (num) in some way

array = (studentinfo *) malloc(num * sizeof(studentinfo));

// use it as a normal array

free(array)   // don't forget to free!

This works because arrays and pointers are considered the same thing.

PS: Sorry for my English, please be patient... :)

BlackBear
  • 21,554
  • 9
  • 45
  • 82