C:动态分配结构体数组的使用

标签 c arrays linux dynamic struct

出现错误,例如 stats.c:28:36: 错误:“factoryStats”没有名为“candyConsumed”的成员。factoryStatsArray[生产者编号].candyConsumed++; 我想要实现的是创建一个结构数组,然后访问它的成员。这是错误的做法吗?

尝试使用 -> 但这不应该也不起作用,因为我存储的是结构,而不是指向结构的指针。

#include "stats.h"
#include <stdio.h>
#include <stdlib.h>

typedef struct {
    int factoryNumber = 0;
    int candyProduced = 0;
    int candyConsumed = 0;
    double minDelay = 0;
    double avgDelay = 0;
    double maxDelay = 0;
} factoryStats;

factoryStats *factoryStatsArray;
int NUM_FACTORIES = 0;

void stats_init (int num_producers) {
    factoryStatsArray = malloc(sizeof(factoryStats) * num_producers);
    NUM_FACTORIES = num_producers;
}
void stats_cleanup (void) {
    free(factoryStatsArray);
}
void stats_record_produced (int factory_number) {
    factoryStatsArray[factory_number].candyProduced++;
}
void stats_record_consumed (int producer_number, double delay_in_ms) {
    factoryStatsArray[producer_number].candyConsumed++;
    if (factoryStatsArray[producer_number].minDelay == 0) {
        factoryStatsArray[producer_number].minDelay = delay_in_ms;
    } else {
        if (factoryStatsArray[producer_number].minDelay > delay_in_ms) {
            factoryStatsArray[producer_number].minDelay = delay_in_ms;
        }
    }
    if (factoryStatsArray[producer_number].maxDelay == 0) {
        factoryStatsArray[producer_number].maxDelay = delay_in_ms;
    } else {
        if (factoryStatsArray[producer_number].maxDelay < delay_in_ms) {
            factoryStatsArray[producer_number].maxDelay = delay_in_ms;
        }
    }
    factoryStatsArray[producer_number].avgDelay+= delay_in_ms;

}
void stats_display(void) {
    printf("%8s%10s%10s10s10s10s\n", "Factory#", "#Made", "#Eaten", "Min Delay[ms]", "Avg Delay[ms]", "Max Delay[ms]");
    for (int i = 0; i < NUM_FACTORIES; i++) {
            printf("%8d%8d%8d%10.5f%10.5f%10.5f",
                    factoryStatsArray[i].factoryNumber, factoryStatsArray[i].candyProduced,
                    factoryStatsArray[i].candyConsumed, factoryStatsArray[i].minDelay,
                    factoryStatsArray[i].avgDelay/factoryStatsArray[i].candyConsumed,
                    factoryStatsArray[i].maxDelay);

    }
}

最佳答案

结构不能以这种方式初始化。删除 typedef struct { ... }factoryStats; 中的所有 = 0。然后编译如 http://ideone.com/uMgDzE 所示.

关于C:动态分配结构体数组的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29158958/

相关文章:

c - 在数组上使用自由函数 (C) 时我的程序崩溃

c - 在 while 循环中一起使用 isalpha 和 toupper 给出 "index out of bounds"

c - 在同一 C 程序中的两个线程之间发送 UDP 消息 (Linux)

python - Arduino 和 pySerial 的问题

Linux内核与用户空间程序的通信

c - 为什么 C 中允许获取函数参数的地址?

linux - SMP 如何处理中断?

c - 如何用c写一个json文件

c++根据随机生成的数组检查用户输入的值

c - 如何在 C 中分解 unix 时间