我已经定义了一个结构
struct subject
{
char name[100];
int year;
};
由于我需要n
这些,我必须使用malloc
我在我的主要功能中执行了以下操作:
int n, i;
scanf("%d", &n);
struct subject *ptr = malloc(n*sizeof(struct subject));
不幸的是,当我尝试使用此代码输入内容时:
for(i = 0; i < n; i++)
{
gets((ptr + i)->name);
scanf("%d", (ptr + i)->year);
}
输入第一个名字后崩溃了。该任务需要使用malloc
。
这是整个代码(不幸的是它是用我的母语,所以它有点不同)
#include <stdio.h>
#include<stdlib.h>
#ifndef DEBUG
#define DEBUG(...)printf(_VA_ARGS_)
#endif
struct kolegij
{
char naziv[100];
int semestar;
};
int main(){
int brPredmeta, i;
scanf("%d", &brPredmeta);
struct kolegij *ptr = malloc(brPredmeta*sizeof(struct kolegij));
if(ptr == NULL)
{
printf("error\n");
return 0;
}
for(i = 0; i < brPredmeta; i++)
{
//gets(ptr->naziv);
gets((ptr + i)->naziv);
scanf("%d", &(ptr + i)->semestar);
getchar();
}
for(i = 0; i < brPredmeta; i++)
{
printf("%s\n", ptr[i].naziv);
printf("%d\n", ptr[i].semestar);
}
return 0;
}
关于重复问题。我相信这不应该是重复的,因为它与结构和指针有关。我以前遇到过scanfs的问题,我没有把它当作解决方案,所以我认为它不应该被标记为重复。
答案 0 :(得分:-6)
Malloc返回一个void指针类型。要将它用作指向结构的指针,必须先将其强制转换。尝试将malloc更改为:
int n, i;
scanf("%d", &n);
struct subject *ptr = (struct subject*) malloc(n*sizeof(struct subject));
您还必须将输入更改为:
for(i = 0; i < n; i++)
{
gets((ptr + i)->name);
scanf("%d", &((ptr + i)->year));
}