gpt4 book ai didi

c - 带多行字符串的 Sscanf

转载 作者:太空狗 更新时间:2023-10-29 16:09:37 24 4
gpt4 key购买 nike

我有一个包含多行的字符串,我想使用 sscanf 来匹配它的特定部分。然而,它似乎只适用于第一行中包含的匹配数据。

例如,如果我有字符串:

"age1: x \r\n age2: x"

并使用 sscanf:

sscanf(string, "age1: %d", &i); - this works
sscanf(string, "age2: %d", &j); - however this doesn't.

有什么想法吗?

最佳答案

正如其他人所说,sscanf 不会像 scanffscanf 那样记住读取了多少数据并推进输入数据。使用 %n 说明符记住读取了多少数据,并自行推进输入:

int bytesRead;
if(sscanf(string, "age 1: %d\n%n", &i, &bytesRead) == 1) &&
sscanf(string + bytesRead, "age 2: %d", &j) == 1)
{
// success
}
else
{
// parsing failed
}

%n 说明符表示“告诉我到目前为止已经读取了多少字节的输入,并将其存储在下一个参数中(必须是指向 int 的指针)”。通过将它放在格式字符串的末尾,我们可以计算出有多少输入被解析了。另请注意,我在 %d 之后添加了一个换行符,以便我们吃掉第一个整数之后的空格;否则,当我们尝试读取 "age 2" 时,它会看到下一个换行符而不是字符 a,并且解析会失败,因为这不匹配。

关于c - 带多行字符串的 Sscanf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4217583/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com