开发者

Applying malloc

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;
开发者_StackOverflow    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 :)


#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()


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜