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 来进行字符串操作。
我正在写 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 来进行字符串操作。