Как скопировать токен, найденный с помощью 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 Ключевое слово встречается более одного раза на входе.

Другие вопросы по тегам