Применение malloc - PullRequest
       1

Применение malloc

0 голосов
/ 03 декабря 2010

ребята ... вы можете помочь мне применить malloc в моем коде ... вот мой код:

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

я знаю, что malloc выделяет больше места, чем обычный массив ... но я все еще испытываю трудности с его использованием ... большое спасибо:)

Ответы [ 4 ]

3 голосов
/ 03 декабря 2010

Прежде чем мы вам поможем, обязательно сделайте следующее:

Тогда:

  • Скажите нам, чего вы хотите достичь;
  • Скажите нам, что на самом деле происходит;
  • Скажите нам, что вы пытались;
  • Скажите нам, что вас беспокоит;
  • Скажите нам, что вы не понимаете.

Также помогают результаты компиляции и программ.

PS: В некотором роде ожидают отрицательного голосования, но это необходимодолжно быть сделано.

0 голосов
/ 03 декабря 2010

вам не нужно использовать malloc в вашем примере, потому что вы знаете, сколько студентов у вас будет в дизайне (я полагаю, потому что цикл for заканчивается фиксированным значением).Когда вы узнаете это только во время выполнения, вы можете:

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!

Это работает, потому что массивы и указатели считаются одним и тем же.

PS: Извините за мой английский, наберитесь терпения...:)

0 голосов
/ 03 декабря 2010
#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();
}

Кстати:
- fflush (stdin) не является переносимым.
- gets () опасен, замените его на fgets ()

0 голосов
/ 03 декабря 2010

Я думаю, что вы в том же учреждении, что и @newbie.Новичок, однако, сделал попытку сам и задал разумные вопросы.

Посмотрите на Правильно ли я использую malloc?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...