我正在写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);
}
答案 0 :(得分:1)
冒着明显的风险,如果你想打印一个带有圆括号的字符串,你应该打印一个带有圆括号的字符串:
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
,则会更好。
< views>这个问题与flex
几乎没有关系。 Flex是一个非常有用的工具,但它不能替代理解如何使用C来进行字符串操作。< / opinion>