【问题标题】:Iterating over array of structs without size in declaration在声明中迭代没有大小的结构数组
【发布时间】:2020-04-03 07:55:20
【问题描述】:

我在尝试迭代结构数组时遇到了问题。设置如下:

数据.h

typedef struct data {
    char *name;
    char *age;
} data;
data array_of_data[];

数据.c

data array_of_data[4] = {
    {"John", "24"},
    {"Melissa", "32"},
    {"Ludwing", "98"}
};

main.c

#include "data.h"
int main() {
    int i=0;
    while(&array_of_data[i] != NULL) {
        do_something();
        i++;
    }
    return 0;    
}

我不能在 .h 文件中声明元素的数量。因此使用 for 循环和 sizeof 或 while 循环进行迭代是行不通的。使用我的解决方案,我收到“未定义的引用”错误。我不明白为什么。任何帮助表示赞赏。

【问题讨论】:

  • 没有声明/定义名为data_array的变量。向我们展示实际代码。
  • 对不起,我更正了。实际代码对于 stackoverflow 帖子来说太大了。

标签: c arrays struct size declaration


【解决方案1】:

在不给出数组长度的情况下处理数组的最简单方法之一是使用保护值,例如 NULL 作为最后一个值。

这将导致如下代码:

data array_of_data[4] = {
    {"John", "24"},
    {"Melissa", "32"},
    {"Ludwing", "98"},
    {NULL, NULL},
};

int main() {
    int i=0;
    while(array_of_data[i].name != NULL) {
        printf("[%d] %s, %s\n", i, array_of_data[i].name, array_of_data[i].age);
        i++;    
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多