sprintf系列函數
阿新 • • 發佈:2017-05-16
出錯 結果 字符 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系列函數