c - 使用 scanf 一次返回一个字符串,以特定字符分隔

标签 c scanf

我正在尝试将一个字符串分类为 C 语言中的不同变量(当我说字符串时,我指的是 char 数组)。该字符串包含较小的“ block ”,由制表符分隔,我希望 sscanf 在每次调用时将下一个“ block ”放入字符串中。

例如,如果字符串是 00:00:00:00 12345 abcd,我希望第一个 sscanf 调用将 00:00:00:00 放入一个字符串,下一个 sscanf 调用将 12345 放入字符串中,等等。

我不明白为什么我的代码不起作用。我有 sscanf(s, "%[^\t]%*c", buf),(我认为)应该告诉 sscanf 读取所有内容直到制表符,然后是 %*c 告诉它读取但丢弃制表符(以便下次调用 sscanf 时,没有前导制表符)。分隔字符串中的 block 的制表符永远不会超过 1 个。

我确信有比使用 sscanf 更好的方法,如果有人告诉我那会很棒,但我也想弄清楚这一点,因为它似乎很容易烦人而且我不知道为什么它不起作用。感谢您的帮助

最佳答案

看看strtok以更简单的方式拆分它。

另请注意,您的 sscanf 调用不会修改字符串,只是从中提取(即在第二次调用时,您不能在不先修改它的情况下将 s 传回给它。)它与 sscanf 类似的东西会做到这一点:

while (/* do your own check on str here*/)
{    
    // Scan the next part
    sscanf(str, "%[^\t]%s", firstBit, remain);

    // Copy it back and do it again
    strcpy(str, remain); // Being careful here not to sscanf into the source string!!
}

关于c - 使用 scanf 一次返回一个字符串,以特定字符分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17834094/

相关文章:

c - 为什么我的可变参数 vsscanf 函数有未定义的行为?

c++ - 多线程实现中的errno

c - Vigenere Cipher - 如何忽略纯文本中的空格(在 C 中)?

c - pcap_send 和 pcap_loop 干扰

c - 第二个 scanf for 字符不起作用

c - 使用 sscanf 匹配零个或多个空格

c - 有符号整数的算术位移

c - 如何获得 GtkCellRenderer 的 GtkTreeViewColumn?

c - fscanf 中的赋值抑制标志

c - Scanf 特定字符到 C 中的数组中