是否可以使用 sscanf 获取第一个 token ,然后跳过一些 token ,然后获取最后一个 token ?
例如/bin/ps -fu1000 的输出
cm 2249 1548 0 0:00.00 ttys001 0:00.01 man sscanf
我已经尝试过:
sscanf(line, "%s %[^\n]", user, cmd);
结果应该是:
user = "cm";
cmd = "man sscanf":
但是它不起作用。
最佳答案
是的,但是它很难看并且无法正确检查错误。
/* assuming `user` and `cmd` are character arrays defined with 42 bytes */
if (sscanf(line, "%41s%*s%*s%*s%*s%*s%*s %41[^\n]", user, cmd) != 2) {
/* handle error */
} else {
/* hopefully ok */
}
您可以将部分 %*s
替换为 %*d
。 *
表示该项目已解析但未分配到任何地方(它被忽略)。
在该语句中,有 6 个被忽略的项目,对应于示例中 "cm"
和 "man sscanf"
之间的项目。
另请注意,我将 scanf 本身的输入限制为 41 个字符。确保不要在对象之外写入。
编辑:我在上次转换之前添加了一个空格,因为与 %s
或 %d
转换不同,%[
转换不跳过前导空格。
关于c - sscanf : get first and last token in a string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6510858/