Flex Regex 为输出打印“()”

Flex Regex printing "()" for the output

我正在写 flex,当我写为输入 00:50 时遇到问题,我希望输出:1 tTIME (00:50),但是我的代码我有这个输出:1 tTIME 00:50)

我的台词到了。我的问题在哪里?提前致谢。

 ^([0-1]?[0-9]|[2][0-3])[:]([0-5][0-9])$ {
    yytext[yyleng-yyleng-1]='(';yytext[yyleng]=')';
    printf("%d tTIME %s \n ", linecounter,yytext);
}

冒着明显的风险,如果你想打印一个带括号的字符串,你应该打印一个带括号的字符串:

printf("%d tTIME (%s) \n ", linecounter, yytext);

不需要为此修改字符串。

yytext指向的字符不属于您。如果出于某种原因需要字符串的副本,则需要自己创建一个副本,并且可以在创建时自由添加更多字符。例如:

char* pstring = malloc(yyleng + 3); /* Room for the parentheses and NUL */
sprintf(pstring, "(%s)", yytext);

对于稍微复杂一点的东西,您会想使用 snprintf 或者,如果有的话,更好,asprintf

此问题与flex关系不大。 Flex 是一个非常有用的工具,但它不能替代理解如何使用 C 来进行字符串操作。