读取文件并将参数传递给C函数中的structs数组

时间:2019-06-09 02:28:21

标签: c

这是我在StackOverflow中的第一篇文章!我正在尝试编写一个读取汇编代码并将其存储在结构数组中的代码。我实现了执行此操作的功能。在函数内部,似乎值已正确传递到结构数组,因为我尝试使用一些printf来查看结构中的值。但是,当我尝试在函数外部看到相同的值时(因此,我在主函数中使用了一些printf),打印出的值绝对是错误的!

Obs:代码的逻辑还不完整,我现在正试图解决文件读取问题。 Obs2:我要读取的.txt文件是:

oi MOV s1,s2

tchau添加s3,s4

1个子s5,s6

void loader(struct instructionEmMnemonico mnemonicoInstru[500]) {
    FILE* arquivo;
    int i = 0, j = 0;
    char letra = '0';
    int endline = 0;
    int mnemonico = 0;
    char line[90];
    char *token, *result;

    arquivo = fopen("teste.txt", "r");
        if(arquivo == NULL) {
            printf("Arquivo nao pode ser aberto\n");
        }
        while(!feof(arquivo)) {
            fgets(line, 90, arquivo);
            printf("%c-----------\n",line[0]);
            if(line[0] != ' ' || line[0] != '\n' || line[0] != '\t') {
                token = strtok(line,", \n\t");
                mnemonicoInstru[i].label = token;
                printf("%s\n",mnemonicoInstru[i].label);
                token = strtok(NULL,", \n\t");
                mnemonicoInstru[i].mnemonico = token;
                printf("%s\n",mnemonicoInstru[i].mnemonico);
                token = strtok(NULL,", \n\t");
                mnemonicoInstru[i].operando1 = token;
                printf("%s\n",mnemonicoInstru[i].operando1);
                token = strtok(NULL,", \n\t");
                mnemonicoInstru[i].operando2 = token;
                printf("%s\n",mnemonicoInstru[i].operando2);
            } else {
                token = strtok(line,", \n\t");
                mnemonicoInstru[i].label = token;
                printf("%s\n",mnemonicoInstru[i].label);
                token = strtok(NULL,", \n\t");
                mnemonicoInstru[i].mnemonico = token;
                printf("%s\n",mnemonicoInstru[i].mnemonico);

                token = strtok(NULL,", \n\t");
                mnemonicoInstru[i].operando1 = token;
                printf("%s\n",mnemonicoInstru[i].operando1);

                token = strtok(NULL,", \n\t");
                mnemonicoInstru[i].operando2 = token;
                printf("%s\n",mnemonicoInstru[i].operando2);

                token = strtok(NULL,", \n\t");
                mnemonicoInstru[i].operando3 = token;
                printf("%s\n",mnemonicoInstru[i].operando3);
            }
            i++;
        }
    fclose(arquivo);
}


int main() {
    struct instructionEmMnemonico programa[500];

    loader(programa);
    printf("-----\n");
    printf("%c--------\n",programa[2].label[0]);
    printf("%s---\n",programa[2].mnemonico);
    printf("%s--\n",programa[2].operando1);
    printf("%s-\n",programa[2].operando2);
return 0;
}

在“加载程序”函数中的printf中,结果是正确的,但是主函数中的printf没有任何意义!

1 个答案:

答案 0 :(得分:3)

这是因为您正在分配指针。 mnemonicoInstru[i].label = token;

由于token指向局部变量line的指针,因此在loader函数外部访问它时,行为不确定。

复制实际内容。

mnemonicoInstru[i].label = strdup(token);