[英]extract from string in c using sscanf
我正在尝试使用sscanf从字符串{"username":"ece","says":"hello"}
提取name和msg的特定值,如下所示:
sscanf(data, "{"\username"\:"\%s"\,"\says"\:"\%s"\}", name, msg);
我需要名字中的'ece'和msg中的'hello',但是我得到了ece“,”“”你好“名字和msg仍然是空的。
%s
格式在下一个空格处停止。 你需要它早点停在'"'
,所以你需要使用一个字符集,
sscanf(data, "{\"username\":\"%[^\"]\",\"says\":\"%s\"}", name, msg);
^^^^^^
read up to the next double quote
您需要在转义字符之前放置\\
escape。
sscanf(data, "{\"username\":\"%s\",\"says\":\"%s\"}", name, msg);
除非用户名后面有空格,否则缓冲区中的所有内容都将被读入name
。
使用反向字符集而不是%s,如此%[^\\"]
问题是%s转换规范读取输入直到达到空白字符。 因此,您在第一个变量中包含“username”之后的所有数据。
1)在整个字符串格式中你必须纠正这个"\\
with \\"
。 \\
提到下一个字符是一个特殊字符, "
是一个特殊字符
2)你必须用%[^\\"]
替换%s
username
并says
。这上面的正则表达式意味着你要捕获不包含"
字符串"
。 所以字符串的捕获将停在第一个"
sscanf(s, "{\"username\":\"%[^\"]\",\"says\":\"%[^\"]\"}", name, msg);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.