gpt4 book ai didi

c - 使用 sscanf 解析出两个字符串

转载 作者:太空宇宙 更新时间:2023-11-04 00:56:02 25 4
gpt4 key购买 nike

我有一个半 xml 格式的文件,其中包含以下格式的行:

<param name="Distance" value="1000Km" />

字符串中的第一个字符通常是制表符或空格。我一直在使用以下内容来尝试解析这两个字符串(从名称和值):

if(sscanf(lineread, "\t<param name=\"%s\" value=\"%s\" />", name, value) == 1)
{
//do something
}

名称和值都是char*

现在,结果总是一样的:名称被解析(我需要删除引号)并且名称始终为空。我做错了什么?

谢谢,感谢代码。

杰斯。

最佳答案

像往常一样,扫描集可能是您的最佳答案:

sscanf(lineread, "%*[^\"]\"%[^\"]\"%*[^\"]\"%[^\"]\"", name, value);

当然,对于实际代码,您还希望限制转换的长度:

#include <stdio.h>

int main() {
char lineread[] = "<param name=\"Distance\" value=\"1000Km\" />";
char name[256], value[256];

sscanf(lineread, "%*[^\"]\"%255[^\"]\"%*[^\"]\"%255[^\"]\"", name, value);

printf("%s\t%s", name, value);
return 0;
}

Edti:顺便说一句,sscanf 返回成功转换的次数,因此在您的原始代码中,您可能想要与 2 而不是 1 进行比较。

Edit2:这么多:%*[^\"]\" 意思是“阅读并忽略引号以外的字符”,然后阅读并跳过引号。下一个 %255[^\"]\" 表示“阅读引号以外的最多 255 个字符,然后阅读并跳过引号。然后重复整个模式以阅读第二个字符串。

关于c - 使用 sscanf 解析出两个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2877179/

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