【问题标题】:Reading multiple strings using sscanf() based on a delimiter使用基于分隔符的 sscanf() 读取多个字符串
【发布时间】:2017-09-10 08:01:17
【问题描述】:

我有多个单词用逗号分隔的字符串

char str[]="K&R,c89,c99,c11";

我正在尝试使用 sscanf() 将前 2 个单词读入单独的字符数组。

sscanf(str, "%[^,] s%[^,]s", str1, str2);

我打算将sscanf() 扫描通过str 直到到达,,将其存储到str1,继续扫描直到另一个, 并存储到str2

但是值只存储在str1 中,而str2 似乎有垃圾。

如果有任何意义,我尝试删除%[^,]ss 之间的空格,但它对输出没有影响。

我做错了什么?或者这对于多个单词是不可能的?

我听说过用strtok() 做类似的事情,但我想知道sscanf() 是否可以用于此。

【问题讨论】:

  • strtok() 具有破坏性,因为它会更改字符串并导致意外行为。因此使用sscanf()会好很多。

标签: c string scanf


【解决方案1】:

Duh.. 我花了一段时间才看到它。去掉格式字符串中的s字符类 [...] 代替了s 并通过将s 放在那里,你迫使sscanf 寻找一个文字 sstr,例如

#include <stdio.h>

#define MAX 8

int main (void) {

    char str[]="K&R,c89,c99,c11";
    char str1[MAX] = "";
    char str2[MAX] = "";

    if (sscanf(str, "%[^,],%[^,]", str1, str2) == 2)
        printf ("str1 : %s\nstr2 : %s\n", str1, str2);

    return 0;
}

使用/输出示例

$ ./bin/sscanfcomma
str1 : K&R
str2 : c89

另外,请考虑保护您的数组免于溢出,例如

    if (sscanf(str, "%7[^,],%7[^,]", str1, str2) == 2)

【讨论】:

  • 我们都曾因类似的事情而陷入困境——别担心,这不会是最后一次:)
  • @DavidC.Rankin 我们都把头撞到了墙上...然后我们停止使用scanf()...
猜你喜欢
  • 2011-11-28
  • 2023-03-10
  • 2012-02-27
  • 1970-01-01
  • 2016-08-14
  • 1970-01-01
  • 1970-01-01
  • 2013-10-02
相关资源
最近更新 更多