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.
精彩评论