sscanf()非常适合我所面临的问题,但它会做出意想不到的事情。
tmp是从文件读入的行,我需要将行的部分解析为单独的数据片段。 curritem是一个包含int dollar,int cent,cat [],int stock和int history []的结构。
我遇到的奇怪问题是当%d拾取双零(00)时,它会适当地将整数零插入到目标中,但在面对单个零(0)时,整数不会被适当地添加到目的地;例如,在收集与history []有关的数据时,一切都很好,向数组添加1,4,8,2,13等,但是单个零会切断那里的所有内容,就好像NULL在该点终止一样,我认为是相关的。
代码:
sscanf(tmp, "%d.%d%s %d %d %d", &curritem.dollar, &curritem.cent,
curritem.cat, &curritem.stock, &curritem.history[0],
&curritem.history[1]);
我遗漏了curritem.history []的一些索引,因为它弄乱了必要的信息。
如果所有整数都正确添加,我应该得到的例子:
curritem.history[0...11] = 5 2 6 1 0 11 9 0 15 0 7 10
现在的结果是什么:
curritem.history[0...11] = 5 2 6 1
当sscanf()看到单个' 0'通过%d并将其添加到& struct.intarray [n]
有什么想法吗?
尽量不要为我的一般程序功能推荐一个完全不同的解决方案,sscanf()在其他方面都在创造奇迹。
感谢您的时间!
编辑:
精确输入的片段:
WL162343Fleece -Lined双L牛仔裤49.95PANTS 3 8 1 0 1 0 7 1 5 2 10 2 6
所有信息都是成功获得的,直到类别之后 - 在这种情况下,' PANTS'。
通过这个例子,我的名为history的int数组应该包含值
3 8 1 0 1 0 7 1 5 2 10 2 6
但是在打印数组中的每个项目时:
int n = 0;
for (n = 0; curritem.history[n]; n++) {
printf("%i ", curritem.history[n]);
}
以下输出结果:
3 8 1
编辑:
' for'用于打印的循环不能区分整数' 0'和数组的空终止。烦。
答案 0 :(得分:2)
当curritem.history[n]
包含零时,您认为for
会在shareIntent.setPackage("com.instagram.android");
shareIntent.putExtra(Intent.EXTRA_TEXT, caption);
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(tempFile));
条件下返回什么内容?