snprintf 函式使用方法

2021-07-23 14:05:48 字數 1349 閱讀 2365

眾所周知,sprintf不能檢查目標字串的長度,可能造成眾多安全問題,所以都會推薦使用snprintf.

自從snprintf代替了sprintf,相信大家對snprintf的使用都不會少,函式定義如下:

intsnprintf(char

*str, size_t size,const

char

*format, ...);

函式說明:

最多從源串中拷貝

size-1

個字元到目標串中,然後再在後面加乙個

0。所以如果目標串的大小為size

的話,將不會溢位。

函式返回值:

若成功則返回欲寫入的字串長度,若出錯則返回負值。

但是大家在使用snprintf的時候是否真的清楚引數裡size的意思呢?看下面的例子:

假設我想將乙個char型別的變數列印成2進製,我應該怎麼寫呢?

之前有個同事這樣寫的:

char

a='a';

char

str[20];

snprintf(str,2,"%02x",a);

對不對呢,錯了。

1). 2不應該是2,應該是3.

2). 也不建議直接寫3,應該寫sizeof(str)

所以建議的寫法是:

char

a='a';

char

str[3];//再大點也沒有問題

snprintf(str,sizeof

(str),"%02x",a);

解釋如下:

size是限定最終生成的dest的字元數,最多拷貝size-1個字元; 一般情況下size會取sizeof(dest),這是為了dst不溢位.

在snprintf(dest, size, "str: %s\n", src)中如果size-1大於等於"str: %s\n"的長度,則把"str: %s\n"都拷貝到dst; 如果size-1小於"str: %s\n"的長度,則從"str: %s\n"拷貝size-1長度的字串到dst,並且末尾置\0.

就是說,拷貝的長度是size-1和源字串長度的最小值;

對於返回值,需要注意的是snprintf的返回值是欲寫入的字串(即源字串)

長度,而不是實際寫入的字串度。如:

char

test[8];int

ret= snprintf(test,5,"1234567890"); printf("%d|%s\n",ret,test);

執行結果為:

10|1234

linux和windows下是不同的

linux下用的是snprintf();

而windows下用的是_snprintf();

snprintf 函式使用方法

眾所周知,sprintf不能檢查目標字串的長度,可能造成眾多安全問題,所以都會推薦使用snprintf.intsnprintf char str,size t size,constchar format,函式說明 最多從源串中拷貝size 1個字元到目標串中,然後再在後面加乙個0。所以如果目標串的大...

snprintf 函式使用方法

函式定義如下 int snprintf char str,size t size,constchar format,函式功能 先將可變引數 按照format的格式格式化為字串,然後再將其拷貝至dest str中。注意事項 如果格式化後的字串長度小於size,則將字串全部拷貝至dest str中,並在...

snprintf 函式使用方法

眾所周知,sprintf不能檢查目標字串的長度,可能造成眾多安全問題,所以都會推薦使用snprintf.自從snprintf代替了sprintf,相信大家對snprintf的使用都不會少,函式定義如下 int snprintf char str,size t size,constchar forma...