根據http://linux.die.net/man/3/sprintf和http://www.cplusplus.com/reference/cstdio/sprintf/sprintf()
和家族返回成功寫入的字符數。失敗時,返回負值。如果格式字符串格式不正確,我會假設可能會發生錯誤,因此負的返回值可能表示除malloc()
錯誤之外的其他值。 errno
是否設置爲指示錯誤是什麼?sprintf()負值返回值errno
12
A
回答
9
C++推遲至C和C不要求或在sprintf()
和家人的描述提errno
(雖然對於某些格式說明,這些功能被定義調用mbrtowc()
,其可以設置EILSEQ
在errno
)
POSIX要求設置錯誤號:
如果遇到輸出錯誤,這些函數應返回一個負值並設置
errno
來指示錯誤。
EILSEQ,EINVAL,EBADF,ENOMEM,EOVERFLOW明確提到:http://pubs.opengroup.org/onlinepubs/9699919799/functions/fprintf.html
5
我總是喜歡 「試用看看」 的方法時,我有這樣一個問題。
char buffer[50];
int n, localerr = 0;
n = sprintf(buffer, "%s", "hello");
localerr = errno; // ensure printf doesn't mess with the result
printf("%d chars\nerrno: %d\nstrerror:%s\n", n, localerr, strerror(localerr));
> 5 chars
errno: 0
strerror: Success
n = sprintf(buffer, NULL, NULL);
localerr = errno;
printf("%d chars\nerrno: %d\nstrerror:%s\n", n, localerr, strerror(localerr));
> -1 chars
errno: 22
strerror: Invalid argument
看起來像在linux上使用gcc進行編譯時設置它。所以這是很好的數據,並且在man page對於errno
它確實提到printf()
(與sprintf()
相同的家族)可能改變errno
(在底部的示例中)。
相關問題
- 1. DateTimeDFF()返回負值
- 2. Tensorflow:tf.reduce_logsumexp返回負值
- 3. gettimeofday返回一個負值
- 4. SQL Sum()返回正值和負值
- 5. 爲什麼要返回一個負的errno? (例如,返回-EIO)
- 6. 比較和比較的負值和正值返回值
- 7. TimeSpan減法方法返回負值TImeSpan
- 8. c#進度條,溢出返回負值
- 9. c# - 二次抽取返回負值
- 10. C#方法返回值錯誤負數
- 11. gettimeofday()有時候會返回負值
- 12. systemverilog算術運算返回負值
- 13. SQL:獲取DATEDIFF不返回負值
- 14. Java的currentTimeMillis返回負值(s)
- 15. 爲什麼Python返回負時區值?
- 16. UUID.randomUUID()。getLeastSignificantBits()總是返回負值?
- 17. Affected_rows返回負值-1,但插入
- 18. ValueAnimator奇怪的行爲:返回負值
- 19. CountDistinct返回負值給出#error
- 20. setsockopt返回errno = 2
- 21. 斯卡拉:減少{_ + _}返回負值,因爲值過高
- 22. LINQ to XML新手問題:返回節點值和正負值
- 23. 負值不等式提取返回錯誤值
- 24. 爲什麼從getFloatFrequencyData爲負值返回值?
- 25. 爲什麼rand()在最小值和最大值爲正值時返回負值?
- 26. sprintf的重複值
- 27. getsockname返回-1,errno是EBADF?
- 28. 爲什麼回負值
- 29. 返回值返回WebCameraId
- 30. OCMock返回值
+1證明,但Cubbi的答案發現更具體的文件。 – cpburnz 2013-02-09 16:34:29
請注意,「嘗試它」方法依賴於標準兼容的實現以及不允許空間用於不同行爲的標準。有時候這種方法會誤導你... – skyking 2017-12-20 15:38:55