如何正确输出yytext的部分值?XML词法分析器修改后无输出问题
问题原因
你修改后的代码触发C语言未定义行为导致程序直接崩溃,因此没有任何输出:printf的%s格式符要求传入char*类型的字符串首地址,而yytext[1]是单个字符值(对应你示例里的字符D的ASCII码)。你将字符值作为内存地址传递给%s后,系统会尝试访问该ASCII码对应的非法内存地址,直接触发段错误导致程序终止运行。
正确实现方式
要获取去除首字符的子串,直接将指针后移一位即可,修改代码为:
printf("Start Tag = %s\n", yytext + 1);
yytext是flex自动生成的字符指针,指向匹配到的token字符串的首地址,yytext + 1会跳过第一个<字符,指向后续标签名的起始位置,且flex会自动在匹配内容末尾添加\0结束符,因此yytext + 1是合法的可直接输出的字符串。
如果后续你也想去除结束标签的</前缀,同样可以将结束标签对应的输出代码修改为:
printf("End Tag = %s\n", yytext + 2);
内容的提问来源于stack exchange,提问作者Roger Costello
相关产品推荐
相关产品推荐

