使用malloc创建动态结构数组

时间:2014-01-03 20:01:08

标签: c arrays struct malloc

我有关于创建动态struct数组的问题。事情是我从文件中读取并且我不允许在scanf之后初始化结构。问题是我想创建x个vinnareinfo类型的结构体。我可以补充一点,我们只允许使用C90,因为它是一个学校项目。真的会帮助那里的所有帮助! :d

#include <stdio.h>

struct vinnareinfo{
    char fornamn[20];
    char efternamn[20];
    int ar;
    };

main(){


struct vinnareinfo *vinnare;

int i = 0, x;
FILE *file;

file = fopen("C:\\Uppgifter.txt", "r");
if (file != NULL){
    fscanf(file, "%d", &i);
}
else{
    printf("Ange antal vinnare:");
    scanf("%d", &i);
    i = i - 1;



    for (x = 0; x < i; x++){
        printf("Ange år: ");
            scanf("%d", ??? )
        }
    }
}

3 个答案:

答案 0 :(得分:0)

#include <stdlib.h>
...

printf("Ange antal vinnare:");
scanf("%d", &i);
//i = i - 1;//remove

vinnare = malloc(i * sizeof(struct vinnareinfo));//check return value of malloc

for (x = 0; x < i; x++){
    printf("Ange ar: ");
    scanf("%d", &vinnare[i].ar);
}

答案 1 :(得分:0)

为了使结构更容易,更易读,请考虑为您的结构定义新的数据类型:

    typedef struct {
    char fornamn[20];
    char efternamn[20];
    int ar;
    }vinnareinfo;

您可以找到有关它的更多有用信息here

scanf("%d", &i);
vinnareinfo *v = (vinnareinfo*)malloc((i-1)*sizeof(vinnareinfo)); //allocated an array of i elements of type  vinnareinfo 

我希望这就是你要找的东西。

答案 2 :(得分:-1)

if (fscanf(file, "%d", &i) != 1) {
    perror("fscanf");
    exit(1);
}

vinnare = malloc(sizeof(struct vinnareinfo) * i);
if (!vinnare) {
    perror("malloc");
    exit(1);
}

for (x = 0; x < i; x++) {
    int rc = fscanf(file, "%*s%*s%d",
        sizeof(vinnare->fornamn)-1,   &vinnare->fornamn,
        sizeof(vinnare->efternamn)-1, &vinnare->efternamn,
        &vinnare->ar);
    vinnare++;
    if (rc <= 0) {
        perror("fscanf");
        break;
    }
}

N.B。可能需要用'19'替换fscanf格式化字符串中的'*',并删除'sizeof(vinnare-&gt; ...) - 1'args。这适用于printf,但应该测试scanf!