1. 程式人生 > >sprintf系列函數

sprintf系列函數

出錯 結果 字符 csdn 產生 con 大寫 format 字符串

1 簡介和功能

  字符串格式化命令,主要功能是把格式化的數據寫入某個字符串中。sprintf 是個變參函數。

  把格式化的數據寫入某個字符串緩沖區。

2 函數原型

  int sprintf( char *buffer, const char *format, [ argument] … );

  buffer:char型指針,指向將要寫入的字符串的緩沖區。

  format:格式化字符串。

  [argument]...:可選參數,可以是任何類型的數據。

3 返回值

  返回寫入buffer 的字符數,出錯則返回-1. 如果 buffer 或 format 是空指針,且不出錯而繼續,函數將返回-1,並且 errno 會被設置為 EINVAL。

  註意1:sprintf 返回被寫入buffer 的字節數,結束字符‘\0’不計入內。即,如果“Hello”被寫入空間足夠大的buffer後,函數sprintf 返回5

  註意2:使用sprintf 對於寫入buffer的字符數是沒有限制的,這就存在了可能buffer溢出。解決這個問題,可以考慮使用 snprintf函數,該函數可對寫入字符數做出限制。

4 格式化數字字符串

1 //把整數123 打印成一個字符串保存在s 中。
2 sprintf(s, "%d", 123); //產生"123"
3 可以指定寬度,不足的左邊補空格:
4 sprintf(s, "%4d%4d", 123, 4567
); //產生:" 1234567" 5 當然也可以左對齊: 6 sprintf(s, "%-4d%4d", 123, 4567); //產生:"123 4567" 7 也可以按照16 進制打印: 8 sprintf(s, "%8x", 4567); //小寫16 進制,寬度占8 個位置,右對齊 9 sprintf(s, "%-8X", 4568); //大寫16 進制,寬度占8 個位置,左對齊

5 連接字符串

1 char buf[60]={0};
2 char*who="I";
3 char*whom="tre";
4 sprintf(buf,"%slove%s.",who,whom);
5 printf("
%s",buf); 6 //輸出結果:"IloveCSDN."

6 考慮到跨平臺性 最好用snprintf

  原型;int _snprintf(char *buffer, size_t count, const char *format [,argument] ... );

7 關於strftime 格式化時間 

  time_t t = time(0);   //產生"YYYY-MM-DD hh:mm:ss"格式的字符串。   char s[32];   strftime(s, sizeof(s), "%Y-%m-%d %H:%M:%S", localtime(&t));

  

sprintf系列函數