Как реализовать динамические массивы в C?
Я пишу этот код, используя динамическое выделение памяти, для записей учеников, как указано, этот код кажется простым, я, очевидно, правильно размещаю элементы в их правильных местах, но когда дело доходит до их печати, это дает мне "core dumped
"ошибка! что не так?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main()
{
char **firstname;
char **lastname;
float *score;
int number_of_records,i,j,ctr=1,row=15,col=20;
/*ctr is to keep track of the student's number (makes it easier to
the user), it starts with (1)*/
firstname=malloc(row*sizeof(char*));
for(i=0;i<row;i++)
{
firstname[i]=malloc((col+1)*sizeof(char));
}
lastname=malloc(row*sizeof(char*));
for(i=0;i<row;i++)
{
lastname[i]=malloc((col+1)*sizeof(char));
}
printf("\nPlease indicate number of records you want to enter (min 2, max 15): ");
scanf("%d",&number_of_records);
score=malloc(row*sizeof(float));
printf("\nPlease input records of students\n(enter a new line after"
"each record), with following format:\nfirst name last name score ");
for (i=0;i<number_of_records;i++)
{
printf("\nEnter record for student %d : ",ctr);
scanf("%s %s %f",firstname[i],lastname[i],score[i]);
ctr++; /*ctr is to keep track of student number
(makes it easy to the user) */
}
for (i=0;i<number_of_records;i++)
{
printf("%s %s %f\n",firstname[i],lastname[i],score[i]);
}
}
1 ответ
Решение
Пожалуйста, измените это:
for (i=0;i<number_of_records;i++)
{
printf("\nEnter record for student %d : ",ctr);
scanf("%s %s %f",&firstname[i],&lastname[i],&score[i]);
ctr++; /*ctr is to keep track of student number (makes it easy to the user) */
}
к этому
for (i=0;i<number_of_records;i++)
{
printf("\nEnter record for student %d : ",ctr);
scanf("%s %s %f",firstname[i],lastname[i],&score[i]);
ctr++; /*ctr is to keep track of student number (makes it easy to the user) */
}
И это будет работать. Причина в том, что firstname[i]
а также lastname[i]
уже pointers
; вам не нужно использовать &
оператор для них.
PS Кроме того, поскольку вы используете C, не приводите возвращаемые значения из malloc
или же realloc
, Это будет сделано автоматически.