繁体   English   中英

使用sscanf从c中提取字符串

[英]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 usernamesays 。这上面的正则表达式意味着你要捕获不包含"字符串" 所以字符串的捕获将停在第一个"

sscanf(s, "{\"username\":\"%[^\"]\",\"says\":\"%[^\"]\"}", name, msg);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM