テキストファイルを最初に1行ずつ、次にトークンに解析するためのCコードがあります。
これは、1行ずつ解析する関数です。
int parseFile(char *filename) {
//Open file
FILE *file = fopen(filename, "r");
//Line, max is 200 chars
int pos = 0;
while (!feof(file)) {
char *line = (char*) malloc(200*sizeof(char));
//Get line
line = fgets(line, 200, file);
line = removeNewLine(line);
//Parse line into instruction
Instruction *instr = malloc(sizeof(instr));
instr = parseInstruction(line, instr);
//Print for clarification
printf("%i: Instr is %s arg1 is %s arg2 is %s\n",
pos,
instr->instr,
instr->arg1,
instr->arg2);
//Add to end of instruction list
addInstruction(instr, pos);
pos++;
//Free line
free(line);
}
return 0;
}
そして、これは各行をいくつかのトークンに解析し、最終的にそれを命令構造体に入れる関数です。
Instruction *parseInstruction(char line[], Instruction *instr) {
//Parse instruction and 2 arguments
char *tok = (char*) malloc(sizeof(tok));
tok = strtok(line, " ");
printf("Line at %i tok at %i\n", (int) line, (int) tok);
instr->instr = tok;
tok = strtok(NULL, " ");
if (tok) {
instr->arg1 = tok;
tok = strtok(NULL, " ");
if(tok) {
instr->arg2 = tok;
}
}
return instr;
}
printf("Line at %i tok at %i\n", (int) line, (int) tok);
ParseInstructionの行は、常に同じ2つの値を出力しますが、これらのポインターアドレスが変更されないのはなぜですか。parseInstructionが毎回一意のポインター値を返すことを確認しましたが、各命令のinstrスロットには同じポインターがあります。
わかりやすくするために、命令は次のように定義されています。
typedef struct Instruction {
char *instr;
char *arg1;
char *arg2;
} 命令;
私は何が間違っているのですか?