C-访问结构数组

布鲁

我正在尝试编写自己的图灵机。我的程序使用两个文件作为参数:我的机器必须使用的初始磁带和一个规则文件。该规则文件每行包含一个规则,每个规则是五个整数:当前状态,找到的符号,新符号,磁头行进方向和新状态。为此,我有一个函数可以读取我的文件,并将找到的每5个字符集放入int规则结构中。然后生成这些结构的数组。

我正在尝试做的是返回此数组,以便以后可以使用它。这是我所拥有的:

struct rule {
    int cur_state;
    int symbol;
    int new_symbol;
    int direction;
    int new_state;
};
typedef struct rule rule;
struct vect {
    int nb_elem;
    rule *p;
};

vect rule_generator (char * file_rule){
    int line_number = 0;
    int ligne;
    char tmp;
    rule rule_list[line_number];
    vect output_rules;
    FILE * file;
    file = fopen(file_rule, "r");

    for(tmp = getc(file); tmp != EOF; tmp = getc(file)){
        if ( tmp == '\n')
            line_number++;
    }
    output_rules.p = malloc(line_number*sizeof(rule));
    assert(output_rules.p);
    output_rules.nb_elem = line_number;
    for (ligne = 0; ligne < line_number; ligne++ ){
        fscanf(file, "%d %d %d %d %d", &rule_list[ligne].cur_state, 
&rule_list[ligne].symbol, &rule_list[ligne].new_symbol, 
&rule_list[ligne].direction, &rule_list[ligne].new_state);
    }

    fclose(file);
    return output_rules;
}
int main (int argc, char *argv[]){
    vect rule_list = rule_generator(argv[2]);
    printf("symbole : %ls \n", &rule_list.p[0].symbol);
    return 0;
}

正如您中某些人已经猜到的那样,它无法打印任何内容...我已经摸了一段时间,试图访问我的阵列。我真的可以在这里用一只手!

基兰·比拉达(kiran biradar)

这里的问题很少。

  1. 您正在声明大小为0的数组。

    int line_number = 0; rule rule_list[line_number];

    您不需要rule_list将其删除。

  2. output_rulesinitilized除了内存分配之外没有其他地方

解:

我建议你使用output_rulesfscanf

for (ligne = 0; ligne < line_number; ligne++ ){
        fscanf(file, "%d %d %d %d %d", &output_rules.p[ligne].cur_state, 
          &output_rules.p[ligne].symbol, &output_rules.p[ligne].new_symbol, 
          &output_rules.p[ligne].direction, &output_rules.p[ligne].new_state);
    }

您是否还想打印的值symbol

当您使用时%ls,习惯了wchar_t *

printf("symbole : %ls \n", &rule_list.p[0].symbol);

应该

printf("symbole : %d \n", rule_list.p[0].symbol);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章