首页 文章

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

提问于
浏览
0

我在处理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 回答

  • 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) { ... } 中,所有_56160都应该更改为 s->list[...] . 这样,参数 s 是一个指针,因此 strcmp 将粘贴到 command_list_concelhos 中声明的 s ,这是所需的行为 .

相关问题