snprintf()函式用於將格式化的資料寫入字串,其原型為:
int snprintf(char *str, int n, char * format [, argument, ...]);
【引數】str為要寫入的字串;n為要寫入的字元的最大數目,超過n會被截斷;format為格式化字串,與printf()函式相同;argument為變數。
【返回值】成功則返回引數str 字串長度,失敗則返回-1,錯誤原因存於errno 中。
snprintf()可以認為是sprintf()的公升級版,比sprintf()多了乙個引數,能夠控制要寫入的字串的長度,更加安全,只要稍加留意,不會造成緩衝區的溢位。
snprintf()與sprintf()使用方法類似,請參考:c語言sprintf()函式
注意:snprintf()並不是標c中規定的函式,但是在許多編譯器中,廠商提供了其實現的版本。
在gcc中,該函式名稱就snprintf(),而在vc中稱為_snprintf()。由於不是標準函式,沒有乙個統一的標準來規定該函式的行為,所以導致了各廠商間的實現版本可能會有差異。
差異發生在引數 n。在gcc中,引數n是要向str寫入3個字元,包括'\0'字元;在vc中,引數n是要寫入的字串的總字元數。
在gcc中執行如下程式:
#include
int main()
輸出:7
ab在vc中執行如下程式:
#include
int main()
輸出:-1
abc從輸出結果可以知道:
gcc中的引數n表示向str中寫入n個字元,包括'\0'字元,並且返回實際的字串長度。
vc中的引數n表示會向str中寫入n個字元,不包括'\0'字元,並且不會在字串末尾新增'\0'符。當字串長度超過引數n時,函式返回-1,以表示可能導致錯誤。
snprintf函式用法
int snprintf char restrict buf,size t n,const char restrict format,函式說明 最多從源串中拷貝n 1個字元到目標串中,然後再在後面加乙個0。所以如果目標串的大小為n的話,將不會溢位。函式返回值 若成功則返回欲寫入的字串長度,若出錯則返...
snprintf函式用法
int snprintf char restrict buf,size t n,const char restrict format,函式說明 最多從源串中拷貝n 1個字元到目標串中,然後再在後面加乙個0。所以如果目標串的大小為n的話,將不會溢位。函式返回值 若成功則返回欲寫入的字串長度,若出錯則返...
snprintf函式用法
int snprintf char restrict buf,size t n,const char restrict format,函式說明 最多從源串中拷貝n 1個字元到目標串中,然後再在後面加乙個0。所以如果目標串的大小為n 的話,將不會溢位。函式返回值 若成功則返回欲寫入的字串長度,若出錯則...