我在处理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]);
}
}
答案 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
中,这是期望的行为。