snprintf/_snprintf 在不一樣平臺間函數差別

原文是以MSDN的文檔介紹爲主。並且仍是以前的版本。不知新版本有沒有改變,一下子安裝好了VS2013 Express試試看。 這個函數最主要的問題是C標準中沒有定義,是各個廠家本身提供的,gcc提供的就是snprintf,ms提供的是加了前下劃線的版本。於是對於函數的行爲沒有標準的定義,存在實現上的差異。主要表如今返回值和輸出緩衝區的行爲上。 gcc的版本會在源字符串長度>=size的狀況下,對目標字符串的結尾自動添加「\0」,返回值爲源字符串長度; ms的版本會在源字符串長度>=size的狀況下,不會對目標字符串的結尾自動添加「\0」,返回值在超過size狀況下返回負值; 相比之下,gcc的版本較爲安全。 看來沒有標準定義的東西要少用,指不定就被坑了,也說不定哪天C標準委員會把snprintf歸入標準中,這樣其中一家的實現確定得改了。安全

相關文章
相關標籤/搜索