プロジェクトでは、構成されたアセンブリ言語をメモリ ロケーションとオペ コードに変換する必要があります。ファイルを 2 回解析する必要があり、これを行うために strtok() を使用しました。しかし、私のプログラムは 2 番目のループに到達しません。(最初にprintステートメントを入れたので、到達しないと確信しています。)ポインターがファイルの最後にあると思ったので、 rewind(filename) と fseek(filename, 0 を入れてみました。 、SEEK_SET)、しかし、どちらも問題を解決していないようです。何かご意見は?ありがとう。
編集:ここにいくつかのコードがあります(2回目のパスのコード)
j=1, i=0;
/*SECOND PASS*/
fseek(opcode,0,SEEK_SET);
char string[5];
while((fgets(str, buffer, file))!=NULL){/*getting line*/
printf("it got here. yup.");
fputs(memLoc(j-1), opcode); /*inserts the location in memory to file*/
fputs(" ", opcode);/*puts a space in the file*/
int state=0; /*state to see if on first or second part of code*/
for(i=0; i<buffer; i++){ /*gets rid of extra new line chars*/
if(str[i]=='\n'){
str[i]= '\0';
break;
}
}
cp = xerox(str);
token = strtok(cp, delimiters);
printf("%s ",token);
/*if it's not a label, find corresponding opcode and insert into file,
switch state, if it's a label, don't switch state*/
if((token!=NULL)&&token[strlen(token)-1]!=':'){
fputs(findOpCode(token), opcode);
state=1;
}
else state=0;
/*if it should be an opcode, insert corresponding opcode into file,
if it should be a location, find and insert where it should be*/
for (;token = strtok(NULL, delimiters);){
printf("%s ",token);
if(token!=NULL)
if(state==0){
fputs(findOpCode(token), opcode);
}
else if(state==1){
fputs(locate(token, fIndex), opcode);
}
}
j++;
fputc('\n', opcode);/*next line*/
}