根据我对 C 标准的阅读,如果在写入时snprinf
达到maxlen
,它将返回一个正值或负值(实际上并不清楚),其大小等于未能写入的字符数。规范还说,该函数将为任何错误返回负值。所以我的问题是:在以下两种情况下它会返回什么......
Maxlen > 0
, 在发生错误并snprintf
退出之前不写入任何字符
Maxlen > 0
,所有字符都被写入,出现某种错误并snprintf
退出
我意识到最后一个,特别是不太可能。但我想更好地理解规范。在我看来,snprintf 的返回使您是否正确编写了字符串的一部分变得模棱两可。
- 编辑
显然这并不清楚。让我详细说明:
*> 哪个负数无关紧要。错误就是错误,它不是
无论在发生之前写入了多少字节。这可能是大多数人的实际情况。但是,我看到 snprintf 应该返回多余字符的数量,我想知道是否可以使用该值。对我来说,规范会遇到麻烦报告一些有用的东西,这对我来说似乎很奇怪,只是让它模棱两可,它是否真的返回了一些不相关的东西。这没有意义吗?我想知道约定是否有更多内容可以确定 snprintf 是否因为输入过多而失败。*
我现在明白了。我看到除截断以外的任何错误都是负数,成功是 0 < R <= maxsize,截断是 0 < maxsize < R。感谢所有回复的人。