阅读令牌误读简单字符串 - c

时间:2018-04-24 23:54:22

标签: c string token

我正在编写一个程序,我需要通过令牌读取令牌并检测某些关键字。其中一个关键字是“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");
        }

1 个答案:

答案 0 :(得分:1)

部分答案。

获得输出的原因是你有一个ms-dos(或windows)类型.txt文件,它有两个换行符。您正在捕捉' \ n'换行符但不是回车符......所以您的字符串%s正在打印回车符。这就是为什么!是该行的第一个字符。