首页 > 解决方案 > 使用 sscanf 解析 C 中的字符串

问题描述

我要解析的字符串称为 str1,它包含PRETTY_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)

我究竟做错了什么?

标签: c

解决方案


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

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;
}


推荐阅读