这种类型的字符串的sscanf

时间:2011-12-31 01:56:17

标签: c++ parsing scanf

即使在阅读文档后如何使用sscanf执行此操作,我也不太确定。

这是我想要做的: 给出一串文字:

读取前64个字符或直到达到空格 然后会有一个空格,一个=,然后是另一个空格。 接下来我想要提取另一个字符串,直到字符串结尾或者达到8192个字符。我还希望它能将第二个字符串“\ n”中出现的任何内容更改为实际的换行符。

我有:“%64s =%8192s”但我不认为这是正确的。

由于

例如:

element.name = hello \ nworld

将字符串1与element.name和string2作为

hello
world

2 个答案:

答案 0 :(得分:1)

我为此建议使用std :: regex,但除此之外,你应该没有错误检查:

#include <cstdio>

int main(int argc, const char *argv[])
{
    char s1[65];
    char s2[8193];
    if (2!=std::scanf("%64s = %8192s", s1, s2))
        puts("oops");
    else
        std::printf("s1 = '%s', s2 = '%s'\n", s1, s2);
    return 0;
}

答案 1 :(得分:1)

您的格式字符串对我来说是正确的;但是,sscanf不会将“\ n”的出现更改为其他任何内容。为此,您需要编写一个使用strtok的循环,或者甚至只是一个简单的for循环来评估字符串中的每个字符,并将其交换为您喜欢的任何字符。您还需要评估sscanf返回值,以确定是否确实正确扫描了2个字符串。 sscanf根据您的格式字符串返回成功扫描的字段数。

@sehe显示了sscanf的正确用法,包括检查正确的返回值。