【问题标题】:_vscprintf equivalent on Android?Android 上的 _vscprintf 等效项?
【发布时间】:2011-10-19 17:46:28
【问题描述】:

_vscprintf 在 Android 上不可用。 vsprintf(NULL, fmt, ap) 也不起作用(产生 seg 错误),所以似乎没有办法计算 vsnprintf 成功所需的缓冲区大小?

Android sources 表示 __android_log_print 函数只是使用 vsnprintf 将字符串截断为 1024...

你如何处理这种情况?

【问题讨论】:

  • "vsprintf(NULL, fmt, ap) 不起作用(产生 seg 错误)": 你确定你没有用错吗?

标签: android c android-ndk printf


【解决方案1】:

C99 标准的第 [7.19.6.13] 节(vsprintf 函数)没有说明输出缓冲区可能是 NULL。

你可能想使用vsnprintf:

int len = vsnprintf(NULL, 0, fmt, ap)

如果调用成功,则返回值是在缓冲区足够大的情况下将写入的字符数,不包括 NUL 终止符。这就像_vscprintf,它的计数中也不包括 NUL 终止符。

【讨论】:

  • 我从 SO post(stackoverflow.com/questions/4785381/…) 那里得到了这个建议,所以即使我已经阅读了文档,我也尝试过......
  • 感谢您提出这个问题,我忽略了 vsnprintf 文档的那部分,我实际上是使用它来生成结果字符串。
猜你喜欢
  • 2012-07-17
  • 2010-10-20
  • 1970-01-01
  • 1970-01-01
  • 2012-08-03
  • 2011-10-29
  • 2011-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多