You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确输出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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:27:04