C - sscanf()%d拾取零并导致destination& curritem.stock为NULL

时间:2015-07-29 22:19:13

标签: c scanf

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'和数组的空终止。烦。

1 个答案:

答案 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)); 条件下返回什么内容?