我有一个文本文件,其中第一个数字定义了数组的大小。我知道callocmalloc可以保留内存,但是如何呢?

此代码:

typedef struct alpha {
    int* size;
    char name;
    int  tot;
    char line[60];
} ALPHA;

fgets(line, 60, fp);
tot = atoi(line);
size = (int*)calloc(name, sizeof(int);

想象一下,在文本的第一行中是数字10,使用此代码,名称的大小将为10?喜欢名字[10] ???

最佳答案

ALPHA *alphas1 = calloc(tot, sizeof(*alphas1));
ALPHA *alphas2 = malloc(tot * sizeof(*alphas2));

是以下版本的略好版本:
ALPHA* alphas1 = calloc(tot, sizeof(ALPHA));
ALPHA* alphas2 = malloc(tot * sizeof(ALPHA));

现在,您可以访问alphas1,以此类推,类似于“数组”:
alphas1[0], alphas1[1], alphas1[2], ..., alphas1[tot]
alphas2[0], alphas2[1], alphas2[2], ..., alphas2[tot]
alphas1[...]的类型为ALPHAalphas2[...]的类型为ALPHA

PS:为了使您的代码更可靠,请不要忘记检查malloc / calloc是否失败。为此,请验证(在您的情况下)检查alphas1alphas2NULL是否不同。如果它们是NULL,则您将无法按照显示的方式对其进行访问,因此应设计一种机制以从中进行恢复,或者直接退出程序(+错误消息)。

关于c - C-Malloc或calloc…以及如何?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2745015/

10-12 04:16