我正在尝试将一个字符串分类为 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/