【问题标题】:Why doesn't post increment on a pointer work "correctly" when passed an an argument to sscanf为什么将参数传递给 sscanf 时指针上的增量不能“正确”工作
【发布时间】:2016-09-30 22:43:52
【问题描述】:

当我在调用 sscanf 时在指向我们正在扫描的字符串的指针上使用后增量时,scanf 实际上对增量值进行操作,而不是我期望的增量之前的值。

这段代码:

for (int i=0;i<=3;++i)
{
    unsigned val;
    sscanf(abyte+=2,"%2x", &val);
    eeprom_cache[i] = val;
}

当 abyte 指向“aabbccdd”时,这个 coee 最终会将 0xbb、0xcc、0xdd 和 0x00 放入 val。根据我对后增量的理解,它应该从 aa 开始。

如果我将代码更改为:

for (int i=0;i<=3;++i)
{
    unsigned val;
    sscanf(abyte,"%2x", &val);
    abyte+=2;
    eeprom_cache[i] = val;
}

它有效。

为什么?这不就是帖子增量的全部内容吗?

我在 Windows 10、VS2010、C++ 上运行。

【问题讨论】:

  • += 不是后增量。
  • abyte 是什么?是char* 吗?
  • += 表示在左侧添加一些东西。它不是后增量。

标签: c++ scanf increment post-increment


【解决方案1】:

abyte += 2 不是后增量,它是一个赋值运算符表达式,立即计算并返回分配的值。

abyte++ 是后增量。但这只会增加一,所以这不是你想要的。循环的第二个版本是正确的方法。

【讨论】:

  • 哇,这太愚蠢了。这就是我们生锈时会发生的情况。
猜你喜欢
  • 2014-11-26
  • 1970-01-01
  • 2021-01-01
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 2021-01-22
  • 2012-01-24
  • 1970-01-01
相关资源
最近更新 更多