C-为什么这个函数将数组打印为NULL字符串



我在处理C中的数组时遇到了问题。你看,这是我代码的一部分,它基本上读取一个文件,并组织葡萄牙第三级行政区划地块的顶点坐标,我们称之为Freguesias。在练习的这一部分,我需要写下文件中出现的所有2rd级行政部门的名称-Concelhos(它已经在我的阵列制图代码中定义好了,这不是问题(。

我想做一个函数来显示Concelhos在文件中出现的内容,我想用这个确切的子函数和函数来编写,这样我以后就可以更改一些内容,但由于某种原因,它没有打印"command_list_Concelhos"中的字符串,它只打印NULL字符串。我不知道为什么会发生这种情况,特别是因为如果我在"read_string_ccelhos"中的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]);
}
}

失败

它应该看起来像

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将粘贴到command_list_concelhos中声明的s,这是所需的行为。

最新更新