【发布时间】:2022-01-23 19:15:03
【问题描述】:
我正在为一个将 C 字符串作为输入的嵌入式系统实现一些 C getter/setter。
我需要解析出一些命令,例如:命令、选项、选项、选项。选项本身需要进一步解析。举个简单的例子
set_speed M1=10 M2=20,set_speed需要解析,那么每个token M1=10和M2=20都需要进一步解析。
不幸的是,strtok不能重复调用,如果可能的话问题就很简单了。
【问题讨论】:
-
老式的方法是编写一个标记器(例如:使用 lex 或 flex),也可能是一个解析器(手动,或使用类似 yacc 的东西),但取决于您的特定语法命令可能更容易或更难。
-
我认为在我的情况下,我可以执行以下操作,strtok 和 extract 命令,然后为每个后续令牌执行 strcmp 以查看前 N 个字节是否与选项匹配,然后最终将子字符串发送到 atof获得价值。想知道有没有更好的方法。我希望 strtok 是可重入的,但我想我可以使用 malloc 保存每个令牌,然后再次运行它。
-
您不需要复制令牌,只需将
strtok返回的指针存储在数组中即可。我假设命令后面的选项数量有一些合理的上限。获得令牌指针数组后,您可以在每个指针上使用strtok来进一步分解它。这样你就不需要strtok重新进入。 -
strtok can not be repeatedly called unfortunately可以。 (?), strtok and extract command, then for each following token do strcmp to see if the first N bytes match the option, then finally send the substring off to atof to get the value正是这样做的。不要想“更好的方法”,随便做什么就行了。I wish strtok was re-entrant为什么需要重入?你有线程吗?您会同时多次调用strtok吗? -
问题很简单。做一个自定义函数。搜索下一个空间。检查路上的每个字符是否合法。使用
strtol将所有内容转换为整数。然后逐个字符地检查它们是否匹配,直到你点击=,然后再次搜索空格并转换。再次重复然后完成。