每当我得到lex程序识别的令牌时,例如
"while" { printf("%s is a loop\n",yytext);}
我想在另一个字符串中收集该令牌名称(即while),例如之前声明的字符串。
"while" { printf("%s is a loop\n",yytext); str = yytext;}
但是当在main中打印str时,它不会产生所需的输出。它将识别出令牌的整个输入打印到输入的末尾。如何将我们找到的令牌复制到另一个字符串?
答案 0 :(得分:1)
在C中,必须明确分配字符串的内存。以下方法可行:
"while" {
printf("%s is a loop\n",yytext);
str = malloc(strlen(yytext)+1);
if (str == NULL) abort();
strcpy(str,yytext);
}
请注意,如果while
关键字在输入中出现多次,上述代码将泄漏内存。