Перебор массива структур без размера в объявлении - PullRequest
0 голосов
/ 03 апреля 2020

У меня были проблемы с попыткой перебрать массив структур. Настройка следующая:

data.h

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

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. Так что итерация с для l oop и sizeof, или пока l oop не работает. С моим решением я получаю ошибку «неопределенная ссылка». Я не понимаю почему. Любая помощь приветствуется.

1 Ответ

0 голосов
/ 03 апреля 2020

Один из самых простых способов обработки массива без указания его длины - использовать защитное значение, например 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++;    
    }
}
...