【问题标题】:sscanf make strange return in C99sscanf 在 C99 中做出奇怪的返回
【发布时间】:2018-02-12 20:37:05
【问题描述】:

我通常使用 sscanf 没有问题,但在这种情况下我迷路了。有人可以帮帮我吗?

char pcStr[12] = {"+CVTER: 6,1\0"};

uint32_t aa,bb;

sscanf(pcStr, "%*[^:] %*2c %zu[^,] %*c %zu", &aa, &bb);

aa = 6 没关系

bb = 未定义的值应该是 1。

为什么会这样?

【问题讨论】:

  • sscanf() 返回什么?如果不是 2,那么 bb 没有被分配到。
  • sscanf() 返回 1 而不是 2 aa 正确填充为 6 但 bb = 0
  • 这应该告诉你你的格式字符串没有按照你的想法做。

标签: scanf c99


【解决方案1】:

[^,] 匹配四个文字字符。您的意思是改用%*[^,] 吗?

【讨论】:

  • %zu 匹配 uint32_t 类型,因此 %zu[^,] 将告诉 sscanf 获取 uint32_t 直到 ',' 字符。
  • @Delphes No. %zu 匹配 size_t,它可能不是 uint32_t。以下[^,] 匹配字符[^,],因为没有介绍性的%[
  • 那么如果不是 %zu 怎么匹配 uint32_t 呢?
  • 要么使用 size_t 代替 uint32_t 来声明 aa 和 bb,要么使用 uint32_t 的 scanf 格式说明符,即宏 SCNu32
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 2017-03-23
  • 1970-01-01
  • 1970-01-01
  • 2017-03-19
  • 2020-10-01
  • 2020-12-17
相关资源
最近更新 更多