snprintf()

snprintf()

snprintf(),函式原型為int snprintf(char *str, size_t size, const char *format, ...)。

將可變參數 “…” 按照format的格式格式化為字元串,然後再將其拷貝至str中。

基本介紹

  • 外文名:snprintf
  • 所需頭檔案:#include <stdio.h>
  • 套用:pc
功能,所需頭檔案,函式返回值,說明,例子,

功能

將可變個參數(...)按照format格式化成字元串,然後將其複製到str中
(1) 如果格式化後的字元串長度 < size,則將此字元串全部複製到str中,並給其後添加一個字元串結束符('\0');
(2) 如果格式化後的字元串長度 >= size,則只將其中的(size-1)個字元複製到str中,並給其後添加一個字元串結束符('\0'),返回值為欲寫入的字元串長度。
#include <stdio.h>int main () {  char a[16];  size_t i;  i = snprintf(a, 13, "%012d", 12345);  // 第 1 種情況  printf("i = %lu, a = %s\n", i, a);    // 輸出:i = 12, a = 000000012345  i = snprintf(a, 9, "%012d", 12345);   // 第 2 種情況  printf("i = %lu, a = %s\n", i, a);    // 輸出:i = 12, a = 00000001  return 0;}

所需頭檔案

#include <stdio.h>

函式返回值

若成功則返回預寫入的字元串長度,若出錯則返回負值
與snprintf的返回值不同,sprintf的返回值是成功寫入的字元串長度,此處需要謹慎處理!

說明

strcpy() sprintf() strcat() 存在安全隱患, 其對應的安全版為:
strncpy() snprintf() strncat()
snprintf(s,100,"%.*S",3,"abcd");
s的值為abc
%.*s 表示有兩項, 第一項指定了長度,第二項則是%s的內容,所以取前三位
在VS2008中需在預編譯處加入
#if_MSC_VER#define snprintf _snprintf#endif
通用ANSI UNICODE 通用定義
_sntprintf

例子

#include<stdio.h>#include<stdlib.h>int main(){   char str[10]={0};  int nLen=snprintf(str,sizeof(str),"123456789012345678");  printf("str=%s\n",str);  printf("nLen=%d\n",nLen);  return 0;}
運行結果:
str=123456789
nLen=18
頭檔案
<stdio.h>

相關詞條

熱門詞條

聯絡我們