我想从SIC汇编代码生成符号表。为此,我试图将每个字符串从汇编代码中分离出来。 因此,在尝试第一步时,我尝试了这段代码。
这里, 我试过的是逐行从文件中读取汇编代码。然后将行中的字符串分隔为标记。
当我删除令牌分离部分(如代码中所述)时,我按预期打印所有行。 但是,如果我与令牌分离一起运行,第一行将被读取并且令牌按我的预期分开。但对于第二行,我得到错误作为分段错误。 我无法追查出错的地方。
所以,我需要专家解释。
提前致谢。
FILE* sourceCode = fopen("/home/muthu/LangFiles/SIC/PASS1/PROGRAM.txt","r"); if(checkForFileOpeningErrors() == ERROR) //Iam using separate function return EXIT_FAILURE; //Terminate the program. int maxLineLength = 50; while(1) { char* lineReader = NULL; // since getline will reallocate. if( getline(&lineReader,(size_t*)&maxLineLength,sourceCode) == -1 ) break; printf("%s",lineReader); // TOKEN SEPARATION STARTS HERE.... If I comment this section out iam getting all lines printed char* wordReader; wordReader = strtok(lineReader," \n"); printf("%s\n",wordReader); while(1) { wordReader = strtok(NULL," \n"); printf("%s\n",wordReader); } // TOKEN SEPARATION ENDS HERE.... }
我的文件:
COPY START 1000
FIRST STL RETADR
CLOOP JSUB RDREC
LDA LENGTH
COMP ZERO
JEQ ENDFIL
JSUB WRREC
J CLOOP
.
.
.
END
我的样本输出:
muthu@muthu-G31M-ES2L:~/LangFiles/PASS1$ ./a.out
All Files successfully opened!! Operation has begun...
COPY START 1000
COPY
START
1000
segmentation Fault.
答案 0 :(得分:3)
您希望何时终止此循环?
while(1)
{
wordReader = strtok(NULL," \n");
printf("%s\n",wordReader);
}
答案 1 :(得分:1)
呃,你使用strtok()
错了。当找不到更多令牌时,它将返回NULL
,您不应该尝试打印它。此外,你的循环永无止境,这将是一个问题。
循环应该看起来像这样,因为现在,你在每次迭代时都将相同的参数传递给strtok()
,这当然永远不会成功:
for(wordReader = strtok(lineReader, " \n");
wordReader != NULL;
wordReader = strtok(NULL, " \n"))
{
printf("found token: '%s'\n", wordReader);
}
答案 2 :(得分:0)
您永远不会脱离while(1)
循环,因此会尝试永远继续,但在strtok
返回NULL
时会导致细分错误。
您需要检查strtok
是否返回NULL
,并在此时退出循环。