[英]Parse string in C with sscanf
The string I am trying to parse is called str1, and it contains PRETTY_NAME="Ubuntu 20.04.1 LTS"
我要解析的字符串称为 str1,它包含PRETTY_NAME="Ubuntu 20.04.1 LTS"
The goal is to have one variable contain PRETTY_NAME
, and the other contains Ubuntu 20.04.1 LTS
.目标是让一个变量包含PRETTY_NAME
,另一个包含Ubuntu 20.04.1 LTS
。 I have declared both variables as char *var1, *var2
我已将两个变量声明为char *var1, *var2
This has to be done with the sscanf function in C.这必须使用 C 中的 sscanf function 来完成。
My current code looks like: sscanf(str1, "%s[^=]^s", var1. var2);
我当前的代码如下所示: sscanf(str1, "%s[^=]^s", var1. var2);
The output I am receiving is that both var1, and var2 return (null)
.我收到的 output 是 var1 和 var2 都返回(null)
。
What am I doing wrong?我究竟做错了什么?
the %s
matches the entire string terminates at white space or \0
including =
in that case, you can't use that here, and you haven't initialized any of your char buffer with a size which leads to crash or undefined behavior. %s
匹配整个字符串以空格或\0
结尾,包括=
在这种情况下,您不能在此处使用它,并且您尚未使用导致崩溃或未定义行为的大小初始化任何 char 缓冲区。 here is a simplified parser.这是一个简化的解析器。
void parse(const char* str, char* pretty, char* release) {
int pretty_end, start, end;
sscanf(str, "%*[^=]%n=\"%n%*[^\"]%n\"", &pretty_end, &start, &end);
strncpy(pretty, str, pretty_end);
pretty[pretty_end] = '\0';
strncpy(release, str+start, end-start);
release[end - start] = '\0';
}
int main() {
const char* str = "PRETTY_NAME=\"Ubuntu 20.04.1 LTS\"";
char pretty[256];
char release[256];
parse(str, pretty, release);
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.