用sscanf解析C中的字符串

用sscanf解析C中的字符串,c,C,我试图解析的字符串称为str1,它包含PRETTY\u NAME=“Ubuntu 20.04.1 LTS” 目标是让一个变量包含PRETTY_NAME,另一个变量包含Ubuntu 20.04.1 LTS。我已经将这两个变量声明为char*var1,*var2 这必须通过C中的sscanf函数来完成 我当前的代码如下:sscanf(str1,“%s[^=]^s”,var1.var2)我收到的输出是var1和var2都返回(null) 我做错了什么?这个%s匹配整个字符串,该字符串以空格或\0结尾,

我试图解析的字符串称为str1,它包含
PRETTY\u NAME=“Ubuntu 20.04.1 LTS”

目标是让一个变量包含
PRETTY_NAME
,另一个变量包含
Ubuntu 20.04.1 LTS
。我已经将这两个变量声明为
char*var1,*var2

这必须通过C中的sscanf函数来完成

我当前的代码如下:
sscanf(str1,“%s[^=]^s”,var1.var2)我收到的输出是var1和var2都返回
(null)


我做错了什么?

这个
%s
匹配整个字符串,该字符串以空格或
\0
结尾,包括
=
在这种情况下,您不能在这里使用它,并且您还没有用导致崩溃或未定义行为的大小初始化任何字符缓冲区。这里是一个简化的解析器

void解析(const char*str,char*pretty,char*release){
结束,开始,结束;
sscanf(str,“%*[^=]%n=\%n%*[^\“]%n\”“,&pretty\u end,&start,&end);
strncpy(pretty、str、pretty_end);
pretty[pretty_end]='\0';
strncpy(释放、str+开始、结束开始);
释放[结束-开始]='\0';
}
int main(){
const char*str=“PRETTY\u NAME=\”Ubuntu 20.04.1 LTS\”;
char-pretty[256];
字符释放[256];
解析(str、pretty、release);
返回0;
}

该行不可能编译。请发布真实代码,请参阅。
char*catch\u str;
这是一个未初始化的指针,因此
sscanf(str1,“%s%s”,catch\u str,…)
是未定义的行为。请将其更改为
char catch\u str[100]
或动态分配。同样的情况也适用于
我的str
,然后您仍然需要修复
sscanf
格式字符串。谢谢。您能提供一些提示,说明我的sscanf格式有什么问题吗?您可能需要类似于
“%[^=]=\“%[^\]”的东西。不要忘记检查
sscanf
的返回值以确保解析成功。使用
%n
很好,但最好先
end=0
,然后在
sscanf()
之后测试,在使用
pretty\u end,start,end
之前,它不是零。