字符串

时间:2015-04-29 19:28:29

标签: c string struct malloc

我已经定义了一个结构

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的问题,我没有把它当作解决方案,所以我认为它不应该被标记为重复。

1 个答案:

答案 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));
}