以下C代码,
#include <stdio.h>
int main()
{
char *source="{\"address\":\"10.10.2.130\"}";
char ip[32];
sscanf(source, "{\"address\":\"%s\"}", ip);
printf("%s\n%s\n", source, ip);
return 0;
}
我希望在ip中提取10.10.2.130,但输出显示10.10.2.130&#34;},为什么?
感谢。
答案 0 :(得分:1)
执行格式字符串的每个部分,而不期待看到将要发生的事情。所以%s
匹配字符串的其余部分。格式字符串中的后续字符无法匹配,因为您尝试匹配已经读取的字符。
您可能想要%[^\"]s
之类的内容,如果遇到引号,它还会停止阅读。
答案 1 :(得分:1)
%s
在到达空格或源字符串结尾时停止扫描。由于您要提取的字符串由"
字符终止,因此您可以使用%[^"]
停止扫描遇到的第一个"
字符,例如:
sscanf(source, "{\"address\":\"%[^\"]\"}", ip);
答案 2 :(得分:1)
%s
的规范是:
匹配一系列非空白字符。
由于尾随"}
不是空格,因此它包含在匹配中。
相反,您可以使用%[0-9.]
格式仅匹配数字和点。
sscanf(source, "{\"address\":\"%[0-9.]\"}", ip);