我有一个半xml格式的文件,其中包含具有以下格式的行:
<param name="Distance" value="1000Km" />
Run Code Online (Sandbox Code Playgroud)
字符串中的第一个字符通常是TAB或空格.我一直在使用以下方法尝试解析两个字符串(从名称和值):
if(sscanf(lineread, "\t<param name=\"%s\" value=\"%s\" />", name, value) == 1)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
名称和值是char*
现在,结果总是一样的:名称得到解析(我需要删除引号),名称总是空的.我究竟做错了什么?
谢谢,代码表示赞赏.
杰西.
像往常一样,扫描设置可能是您最好的答案:
sscanf(lineread, "%*[^\"]\"%[^\"]\"%*[^\"]\"%[^\"]\"", name, value);
Run Code Online (Sandbox Code Playgroud)
当然,对于实际代码,您还希望限制转换的长度:
#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;
}
Run Code Online (Sandbox Code Playgroud)
Edti:BTW,sscanf返回成功转换的次数,因此在原始代码中,您可能想要比较2而不是1.
Edit2:这么多:%*[^\"]\"
意思是"读取并忽略引号之外的字符",然后读取并跳过引号.下一个%255[^\"]\"
意思是"读取最多255个字符而不是引号,然后读取并跳过引号.然后重复整个模式以读取第二个字符串.