c - sscanf : get first and last token in a string

标签 c scanf

是否可以使用 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/

相关文章:

c - 按位和求值

相当于 C fscanf 的 Java

c++ - C/C++。输入行数字

c - 如何读取文件同一行的多个字符串?

c - scanf、gets 和 fgets 的选项是什么?

c - Bash 脚本中的流程控制和返回值

c - 重新定位单链表中的节点会导致无限循环

c - 是否有必要检查无符号 8 位整数的字节顺序?

c - c语言获取和检查字符串

c - 使 `gcc' 需要 : *** No rule to make target `all' , 。停止