c - 无法解析出 | 之间的子字符串 C中的字符
问题描述
我有一个字符串,其中包含由 | 分隔的信息 字符,我需要为每条信息创建子字符串。此外,某些字段可能为空白。
值的顺序为 FirstName|LastName|Age|IDNumber|Height|Weight
所以可能的字符串可能是:
char* strA = "约翰|Doe|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);
打印
John
但是当我尝试通过调用来获取前两个字段时
char* strA = "John|Doe|50|123456|70|150";
char* a, b;
sscanf(strA, "%[^|]|%[^|]|", &a, &b);
printf("%s | %s\n", &a, &b);
它打印
oe | Doe
我不知道为什么会这样。
解决方案
您的指针设置错误。使用动态或自动分配。sscanf
此外,您对for format的论点%[^|]
同样是错误的。这需要 achar*
和您在案例中交付 a ,以及char**
在案例中指向(one)&a
的简单指针。两者都应该指的是有足够的内存来消耗您的输入。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);
坦率地说,几乎任何称职的现代工具链都应该警告您发送到scanf
和printf
. 打开你的警告和/或使用在这个千年开发的工具链。
推荐阅读
- sql - SQL如何获取逗号分隔列表(字符串格式)并对其进行排序
- javascript - 我想在按下按钮时打开一个页面
- apache-spark - java.lang.ClassNotFoundException: org.apache.spark.examples.SparkPi
- php - 生成一个数组的随机两个值的数组
- r - 使用 trunc 函数时的问题
- python - 如何使用来自另一个文件的匹配值替换使用熊猫的列?
- php - 获取对象 xml 中的数组(simplexml_load_string)
- python - pip WeasyPrint 安装后如何解决 Cairo 和 Pango 版本问题?
- docker - 忽略在用于长时间运行服务的同一 docker 映像上运行开关命令的重启策略
- docker-compose - 组合起来:无法检索 .docker/config.json