Почему эта функция печатает массив как строки NULL? - PullRequest
0 голосов
/ 09 декабря 2018

У меня проблема с массивом на C. Видите ли, это часть моего кода, которая в основном читает файл и организует координаты вершин участков административных подразделений 3-го уровня в Португалии, чтомы называем Freguesias.В этой части упражнения мне нужно написать имя всех административных подразделений 2-го уровня - Concelhos (который уже хорошо определен в моем коде в массиве Cartography cartography, это не проблема), которые появляются в файле.

Я хочу сделать функцию, которая показывает, что Concelhos появляется в файле, и я хочу написать с этими точными подфункциями и функциями, чтобы я мог изменить некоторые вещи позже, но по некоторым причинам он не печатает строкив "command_list_concelhos" он просто печатает пустые строки.Я не знаю, почему это происходит, особенно если это правильно, поэтому я делаю printf внутри и вне для for в read_string_concelhos.

Извините, если этот вопрос неправильно объяснен, слишком большой или просто маленькая деталь, которую я упускаю, но у меня нет лучшего способа объяснить это ...

#define MAX_STRING 256
#define MAX_NAMES  50

typedef char String[MAX_STRING];

typedef struct {
    String list[MAX_NAMES];
    int n_strings;
}   StringList;

int read_string_concelhos(StringList s ,Cartography cartography, int n)
{
    int i, j=1;
    strcpy (s.list[j-1], cartography[0].identification.concelho);
    for ( i = 0 ; i < n ; i++){
        if ( strcmp(cartography[i].identification.concelho, s.list[j-1]) != 0){
            strcpy(s.list[j] , cartography[i].identification.concelho);
            j++;
        }
    }
    return j; // n_strings
}

void command_list_concelhos(Cartography cartography, int n)
{
    StringList s;
    s.n_strings = read_string_concelhos(s, cartography, n);
    int i;
    for(i = 0; i < s.n_strings; i++ )
    {
        printf("\n", s.list[i]);
    }
}

Fail

Как это должно выглядеть

1 Ответ

0 голосов
/ 10 декабря 2018

int read_string_concelhos(StringList s ,Cartography cartography, int n)
должен быть изменен на
int read_string_concelhos(StringList* s ,Cartography cartography, int n)

А внутри функции int read_string_concelhos(StringList* s ,Cartography cartography, int n) { ... } все s.list[...] должны быть изменены на s->list[...].Таким образом, параметр s является указателем, поэтому strcmp вставит в s объявленный в command_list_concelhos, что является желаемым поведением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...