Sscanf用于此类型的字符串

sscanf for this type of string

本文关键字:字符串 类型 用于 Sscanf      更新时间:2023-10-16

即使在阅读了文档之后,我也不太确定如何使用sscanf。

这是我想做的:给定一串文本:

读取到前64个字符或直到达到空格然后是一个空格,一个=,然后是另一个空格。接下来,我想提取另一个字符串,直到字符串的末尾,或者如果达到8192个字符。我还希望它将第二个字符串"n"中的任何出现更改为实际的换行字符。

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

感谢

,

element.name = hellonworld

将string 1与element.name和string2作为

hello
world

我推荐使用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;
}

你的格式字符串在我看来是正确的;但是,sscanf不会将"n"的出现次数更改为其他任何内容。要做到这一点,您需要编写一个循环,使用strtok或甚至只是一个简单的for循环计算字符串中的每个字符,并将其交换为您喜欢的任何字符。您还需要计算sscanf返回值,以确定是否确实正确扫描了这两个字符串。Sscanf根据您的格式字符串返回成功扫描的字段数。

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