我正在编写一个程序,我需要通过令牌读取令牌并检测某些关键字。其中一个关键字是“gt”,代表大于。
我通过制表符,换行符,空格和返回将文本文件拆分为标记。缓冲区只是一个大型的char数组。
char* word = strtok(buffer, " \n\t\r");
然后我有几个案例来检查可能的单词。 gt如下。奇怪的是,这适用于其他关键字,有时甚至是其他'gt'。
//gt
if(strcmp("gt", word) == 0){
type = GT;
literal_value = 0;
}
然而,尽管输入了'gt',但仍无法达到。我注意到,当我打印时,会发生这种情况
printf("WORD is %s!\n", word);
PRINTS "!ORD is gt"
这显然是不对的。如果答案是显而易见的,请告诉我 - 这个bug已经躲过了很长时间!
更新片段:
char * word = strtok(buffer, " \n\t\r");
while (word != NULL){
printf("word is %s!\n", sections); //PRINTS "!ORD is gt"
if(sections[0] == ';'){
break; //comment indicated by ';'
}
//gt
if(strcmp("gt", word) == 0){
type = GT;
literal_value = 0;
}
//...............
//other comparisons for less than, equal to
process(&curr, output_file); //function to process current token
word = strtok(NULL, " \n\t\r");
}
答案 0 :(得分:1)
部分答案。
获得输出的原因是你有一个ms-dos(或windows)类型.txt
文件,它有两个换行符。您正在捕捉' \ n'换行符但不是回车符......所以您的字符串%s
正在打印回车符。这就是为什么!
是该行的第一个字符。