【问题标题】:Ignoring "=" character with fscanf使用 fscanf 忽略“=”字符
【发布时间】:2021-08-29 19:35:32
【问题描述】:

我正在尝试读取包含此格式 abc=1234 的行的文件。如何让 fscanf 忽略 = 并存储 str1="abc" 和 str2="1234"?

我试过了:

fscanf(fich1, "%[^=]=%[^=]" , palavra, num_char)

【问题讨论】:

  • palavra 和 num_char 是如何声明的?

标签: c scanf


【解决方案1】:

我建议使用fgets 读取行,然后使用sscanf 解析它们。但是,如果您愿意,您可以对 fscanf 使用相同的原则。

#include <stdio.h>

int main(void) {
    char buf[100];
    char str1[100];
    char str2[100];

    if(! fgets(buf, sizeof buf, stdin)) return 1;

    if(sscanf(buf, "%[^=]=%s", str1, str2) != 2) return 1;

    puts(str1);
    puts(str2);
}

那么%[^=]=%s 做了什么?首先%[^=] 读取所有内容,直到第一次出现= 并将其存储在str1 中。然后它读取= 并丢弃它。然后它读取一个字符串到str2。在这里您可以看到格式字符串的问题。 %[^=] 期望字符串以= 结尾,而您最后还有另一个字符串。这样你就可以成功读取字符串abc=1234=。

请注意,%[^=] 和 %s 对待空白的方式略有不同。因此,如果这是一个问题,您需要考虑到这一点。例如%[^=]=%[^\n]。

并且为了避免缓冲区溢出,您可能还想做%99[^=]=%99[^\n]。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多