gpt4 book ai didi

c - 读取文件并将参数传递给 C 函数中的结构数组

转载 作者:太空宇宙 更新时间:2023-11-04 01:44:23 25 4
gpt4 key购买 nike

这是我在 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;
}

在loader函数中的printf,结果是正确的,但是main函数中的printf没有任何意义!

最佳答案

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

因为 token 是指向局部变量 line 的指针,所以当您在 loader 函数之外访问它时,您有未定义的行为。

复制实际内容。

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

关于c - 读取文件并将参数传递给 C 函数中的结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56511529/

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