无法解析 | 之间的子字符串C语言中的字符

标签 c string scanf

我有一个字符串,其中包含由 | 分隔的信息字符,我需要为每条信息创建子字符串。此外,某些字段可能为空。

值的顺序为名字|姓氏|年龄|IDNumber|高度|体重

所以可能的字符串可能是:

char* strA = "约翰|多伊|50|123456|70|150"; char* strB = "詹姆斯|史密斯|40|345678||";

我可以使用 sscanf 很好地提取第一个字段,但是当我尝试获取多个字段时,我得到了错误的值。

为了获得第一个值,我可以调用

char* strA = "John|Doe|50|123456|70|150";
char* a, b;
sscanf(strA, "%[^|]|", &a);
printf("%s\n", &a);

打印 约翰 但是当我尝试通过调用

获取前 2 个字段时
char* strA = "John|Doe|50|123456|70|150";
char* a, b;
sscanf(strA, "%[^|]|%[^|]|", &a, &b);
printf("%s | %s\n", &a, &b);

打印出来 oe |美国能源部

我不明白这是为什么。

最佳答案

您的指针设置错误。使用动态或自动分配。此外,您对 sscanf 格式 %[^|] 的参数同样是错误的。这需要一个 char* 并在 &a 情况下传递一个 char** ,以及一个指向 char 的简单指针> (一)在 &b 情况下。 两者都应该指的是足以消耗您的输入的内存。

示例(使用自动存储)

const char* strA = "John|Doe|50|123456|70|150";
char a[32], b[32];
sscanf(strA, "%31[^|]|%31[^|]|", a, b);
printf("%s | %s\n", a, b);

坦率地说,几乎所有有值(value)的现代工具链都应该警告您发送到 scanfprintf 的不正确类型。调出警告和/或使用本世纪开发的工具链。

关于无法解析 | 之间的子字符串C语言中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58381584/

相关文章:

c# - 将一个字符串从一个字符读取到另一个字符

java - 如何从字符串中找到匹配的单词以及百分比值?

C++ 快速 cin 输入流

c - 在二叉树中插入字符串

java - 创建具有字符串格式的 Java 字符串变量

c - 我无法让错误 "Variable uninitialized"消失

c++ - 我可以将 `stdin` 配置为从 C++ 字符串中读取吗?

c - 错误 : unknown type in C. 包含所有必需的头文件时可能是什么原因?

c - 为 Python 扩展编译 C 文件时 Exec 格式错误

c - c中int**函数的返回