Как скопировать токен, найденный с помощью lex (yytext), в другую строку?
Всякий раз, когда я получаю токен, распознаваемый программой lex, например,
"while" { printf("%s is a loop\n",yytext);}
Я хочу собрать это имя токена (то есть, пока) в другой строке, которая объявлена ранее, например,
"while" { printf("%s is a loop\n",yytext); str = yytext;}
но он не выдает требуемый результат при печати str в main. Он печатает весь ввод с того места, где токен был распознан, до конца ввода. Как скопировать найденный токен в другую строку?
1 ответ
Решение
В C память для строк должна быть выделена явно. Следующее будет работать:
"while" {
printf("%s is a loop\n",yytext);
str = malloc(strlen(yytext)+1);
if (str == NULL) abort();
strcpy(str,yytext);
}
Помните, что приведенный выше код приведет к утечке памяти, если while
Ключевое слово встречается более одного раза на входе.