C: 为什么 "sscanf" 不截尾字符?
C: why "sscanf" doesn't cut trailing characters?
下面的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"},为什么?
谢谢。
格式字符串的每一部分都在执行时不期待看到会发生什么。所以 %s
匹配字符串的其余部分。格式字符串中的后续字符无法匹配,因为您正在尝试匹配已读取的字符。
您可能需要类似 %[^\"]s
的内容,如果遇到引号,它还会停止阅读。
%s
在到达空格或源字符串末尾时停止扫描。由于要提取的字符串以 "
字符结尾,因此可以使用 %[^"]
停止扫描遇到的第一个 "
字符,例如:
sscanf(source, "{\"address\":\"%[^\"]\"}", ip);
%s
的规格是:
Match a sequence of non-white-space characters.
由于尾随 "}
不是空格,因此包含在匹配项中。
相反,您可以使用 %[0-9.]
格式来匹配数字和点。
sscanf(source, "{\"address\":\"%[0-9.]\"}", ip);
下面的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"},为什么?
谢谢。
格式字符串的每一部分都在执行时不期待看到会发生什么。所以 %s
匹配字符串的其余部分。格式字符串中的后续字符无法匹配,因为您正在尝试匹配已读取的字符。
您可能需要类似 %[^\"]s
的内容,如果遇到引号,它还会停止阅读。
%s
在到达空格或源字符串末尾时停止扫描。由于要提取的字符串以 "
字符结尾,因此可以使用 %[^"]
停止扫描遇到的第一个 "
字符,例如:
sscanf(source, "{\"address\":\"%[^\"]\"}", ip);
%s
的规格是:
Match a sequence of non-white-space characters.
由于尾随 "}
不是空格,因此包含在匹配项中。
相反,您可以使用 %[0-9.]
格式来匹配数字和点。
sscanf(source, "{\"address\":\"%[0-9.]\"}", ip);