如何将lex(yytext)找到的令牌复制到另一个字符串?

时间:2014-03-04 13:02:45

标签: lex lexical-analysis

每当我得到lex程序识别的令牌时,例如

"while"   { printf("%s is a loop\n",yytext);}

我想在另一个字符串中收集该令牌名称(即while),例如之前声明的字符串。

"while"   { printf("%s is a loop\n",yytext); str = yytext;}

但是当在main中打印str时,它不会产生所需的输出。它将识别出令牌的整个输入打印到输入的末尾。如何将我们找到的令牌复制到另一个字符串?

1 个答案:

答案 0 :(得分:1)

在C中,必须明确分配字符串的内存。以下方法可行:

    "while" {
            printf("%s is a loop\n",yytext);
            str = malloc(strlen(yytext)+1);
            if (str == NULL) abort();
            strcpy(str,yytext);
     }

请注意,如果while关键字在输入中出现多次,上述代码将泄漏内存。