根據我對C標準的閱讀,如果snprinf
在寫入時達到maxlen
,它將返回一個正數或負數(它實際上並不清晰),其大小與未寫入的字符數相等。該規範還表示,該函數將返回任何錯誤的負值。所以我的問題是:這是什麼返回在以下兩種情況下...如果maxlen> 0時什麼都不寫,snprintf會返回什麼結果?
Maxlen > 0
,發生前一個錯誤,snprintf
撈出
Maxlen > 0
沒有寫入字符,所有字符都寫,錯誤某種發生和snprintf
保釋金
我知道最後一個,特別是不太可能。但我想更好地理解規範。在我看來,snprintf的返回使得你是否正確地寫了一部分字符串不明確。
-
-
-
- 編輯
-
-
顯然這是不明確。讓我詳細說明一下:
*>哪個負數不重要。錯誤是一個錯誤,它不是
事情發生之前寫入了多少字節。 這可能是大多數人的實際案例。我看到snprintf應該返回多餘的字符數,但是,我想知道是否可以使用該值。 對我來說,這個規範似乎很奇怪,它會經歷報道有用的事情的麻煩,只是讓它不清楚它是否真的返回了一些不相關的東西。這沒有意義嗎? 我想知道是否還有更多的是使我們能夠確定的snprintf失敗,因爲它被賦予了太多的輸入習慣。*
我現在就買下。我發現截斷以外的任何錯誤都是負數,成功爲0 < R < = maxsize,截斷爲0 < maxsize < R.謝謝大家的回覆。
「如果輸出由於此限制而被截斷,則返回值是字符數(不包括結束空值如果有足夠的空間可用,它將被寫入最終的字符串。「什麼含糊不清? – Kevin
您在我的問題中間沒有閱讀這兩行。 – SaburoutaMishima
我做了,而且我還不確定爲什麼你感到困惑。 – Kevin