c - 使用 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)
。
我究竟做错了什么?
解决方案
匹配整个%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;
}
推荐阅读
- reactjs - 我可以在 create-react-app v2 中使用 css 模块覆盖 Material-UI 吗?
- python-3.x - 为什么正则化强度负值不是正确的方法?
- c# - 通过变量传递图像 URL 时,Crystal Report 不显示动态图像
- excel - 如何在 excel 中使用高级过滤器来排除过滤的数据而不是包含它
- python - 通过其他键将列添加到具有非唯一 ID 的 pyspark 数据帧
- php - 自动将对象添加到数组
- c# - Pose Shim:测试无限期运行
- abap - 报告没有返回任何数据的情况如何处理?
- python-3.x - 将记录永久存储在数组 python 中。不写入文件?
- javascript - 处理浏览器脚本中的错误