【发布时间】:2021-05-10 20:33:28
【问题描述】:
我正在使用我的 C 程序,我对如何使用 sscanf 函数有疑问。
我必须从像something$HOME/something2 这样的字符串中获取三个字符串:第一个必须包含“something”,第二个必须包含“HOME”,第三个必须包含“/something2”。
但它还必须能够拆分$HOME或$HOME/something,或something$HOME...
我写的是这样的:
sscanf(str,"%m[^$]$%m[_a-zA-Z0-9]%*m", &ant, &act, &sig);
但是对于$HOME、$HOME/something、something$HOME... 的情况,它需要非常奇怪的字符串。如果它们不存在,我可以在我的 sscanf 上放置什么以通过 NULL 获取其他值?
【问题讨论】:
-
sscanf格式字符串不是正则表达式。如果您需要正则表达式功能,则需要使用专用库。 -
格式字符串末尾的
"…%*m"被破坏;在m之后需要s或[…](扫描集)。您没有测试来自sscanf()的返回值;它会告诉你出了点问题,可能是通过返回 EOF,也可能是在你需要返回 3 时只返回 2。 -
请注意,
sscanf()转换规范均不接受空字符串,因此您无法通过一次调用sscanf()来处理“可能丢失的部分”。使用sscanf()的优点之一是您可以在相同的数据上尝试不同的格式字符串,直到找到可以根据需要解析数据的格式字符串。