即使在阅读文档后如何使用sscanf执行此操作,我也不太确定。
这是我想要做的: 给出一串文字:
读取前64个字符或直到达到空格 然后会有一个空格,一个=,然后是另一个空格。 接下来我想要提取另一个字符串,直到字符串结尾或者达到8192个字符。我还希望它能将第二个字符串“\ n”中出现的任何内容更改为实际的换行符。
我有:“%64s =%8192s”但我不认为这是正确的。
由于
例如:
element.name = hello \ nworld
将字符串1与element.name和string2作为
hello
world
答案 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的正确用法,包括检查正确的返回值。