gpt4 book ai didi

C - 访问结构数组

转载 作者:行者123 更新时间:2023-12-04 11:47:32 24 4
gpt4 key购买 nike

我正在尝试编写我自己的图灵机。我的程序将两个文件作为参数:我的机器必须使用的初始磁带,以及一个规则文件。该规则文件每行一条规则,每条规则为五个整数:当前状态、找到的符号、新符号、头部前进的方向和新状态。为此,我有一个函数可以读取我的文件并将每组五个 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;
}

正如你们中的一些人可能已经猜到的那样,这不会打印任何内容......我已经挠头了一段时间,试图访问我的数组。我真的可以在这里用一只手!

最佳答案

这里几乎没有问题。

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

    int line_number = 0;
    规则 rule_list[line_number];

    您不需要 rule_list 只需将其删除即可。

  2. output_rules 除了内存分配之外没有被初始化的地方。

解决方案:

我建议您对 fscanf 使用 output_rules

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);

关于C - 访问结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53238846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com