C-为什么此函数将数组打印为NULL字符串?

时间:2018-12-09 02:03:25

标签: c

我在处理C语言中的数组时遇到问题。您会看到,这是我代码的一部分,该代码基本上是读取文件并组织葡萄牙第3级行政区划的包裹顶点的坐标-我们称为Freguesias。在练习的这一部分中,我需要写出出现在文件中的所有第2级管理分区的名称-Concelhos(在我的数组“制图”制图的代码中已经很好地定义了,这不是问题)。

我想做一个函数来显示Concelhos在文件中出现的内容,并且我想使用这个确切的子函数和函数进行编写,以便以后可以更改某些内容,但是由于某些原因,它不会在“ command_list_concelhos”中打印字符串”,它只显示NULL字符串。我不知道为什么会这样,特别是因为这样做正确,所以如果我在“ read_string_concelhos”中的for内外执行printf的话。

很抱歉,如果我误解了这个问题,我错过了太大或只是一个小细节,但我没有更好的方式来解释它...

#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

How it should look like

1 个答案:

答案 0 :(得分:1)

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中,这是期望的行为。