c - 使用函数 sscanf 解析逗号分隔值的问题
问题描述
我在尝试使用 sscanf 从字符串中读取值时遇到了问题,但我不知道自己做错了什么。
#include <stdio.h>
int main(void)
{
char line[] = "Super Furnace,400,300.000000";
char name[20];
size_t q;
double p;
int result = sscanf(line, "%[^,]s,%lu,%lf", name, &q, &p);
printf("result = %d\n", result);
printf("line = `%s`\n", line);
printf("data read: %s, %ld, %lf\n", name, q, p);
}
当我运行以下代码时,预期的输出应该是
result = 1
line = `Super Furnace,400,300.000000`
data read: Super Furnace, 400, 300.000000
然而,生成的输出类似于
result = 1
line = `Super Furnace,400,300.000000`
data read: Super Furnace, 94536181571648, 0.000000
解决方案
因为你知道只读这三个字段之一result
。如果你改变1
sscanf()
size_t q;
double p;
至
size_t q = 2;
double p = 3.3;
输出变为
result = 1
line = `Super Furnace,400,300.000000`
data read: Super Furnace, 2, 3.300000
始终初始化所有变量。在输出中包含您的字符串也很有用,因为我们看不到空格或TAB
. 就像你在上一行所做的那样......
就像是
#include <stdio.h>
int main(void)
{
const char line[] = "Super Furnace,400,300.000000";
char name[20];
size_t q = 2;
double p = 3.3;
int result = sscanf(line, "%[^,],%lu,%lf", name, &q, &p);
printf("result = %d\n", result);
if ( result != 3 ) return -1;
printf("line = `%s`\n", line);
printf("data read: \"%s\", %ld, %lf\n", name, q, p);
return 0;
}
得到
result = 3
line = `Super Furnace,400,300.000000`
data read: "Super Furnace", 400, 300.000000
正如评论中所发布的那样,这%[^,]
是一个有效的说明符,而s
之前的说明%lu
将阻止sscanf()
查看该行的其余部分
推荐阅读
- r - 如何预测输出标签而不是概率?
- tinymce - 图像编辑不起作用,高度宽度值在微型编辑器中的编辑器下不起作用
- c# - 在 Visual Studio 2019 中替换 C# 的数据源
- google-cloud-platform - 我可以在 Cloud Data Fusion 中创建多少个管道?
- c# - 为什么我不能将命令绑定到列表框命令的双击
- taskwarrior - 如何关闭taskwarrior中的多个任务?
- c# - 如何在 LINQ c# 中使用枚举进行分组并找到最大值
- rust - 如何从以前的宏生成代码生成宏?
- python - Python:错误 GoogleAdsServerFault:[UserListError.USER_LIST_MUTATE_NOT_SUPPORTED
- python - 使用浮点数和前导零格式化 pandas 数据帧