對于熟悉C的人來說,sprintf并不陌生,在很多情況下,一般都會使用sprintf來代替itoa.sprintf函數的原型是:
int sprintf(char* str, const char* format, ...);
除了前兩個參數類型固定外,后面可以接任意多個參數,格式化輸出一個字符串:
1) 整數格式化輸出
如果要將數字 3915 保存到字符串str中/*假定字符串夠長,以下都是為這樣*/.
sprintf(str,"%d",3915); // "3915" 這是最基本的輸出
sprintf(str,"%5d",3915); // " 3915" 右對齊,相當于C++中的制表符,如數字沒有5位時左另用空格補滿.
sprintf(str,"%05d",3915); // "03915"右對齊,相當于C++中的制表符,如數字沒有5位時左另用'0'補滿
sprintf(str,"%3d",3915); // "3915", 如果數字長度超出時,輸出完整的數字
sprintf(str,"%-5d",3915); // "3915 " 左對齊,如數字沒有5位時左另用空格補滿,超出時輸出所有數字
對于十六進制也類同于十進制
sprintf(s, "%5x", 3915); // " f4b"右對齊,小寫16 進制,寬度占5 個位置
sprintf(s, "%5X", 3915); // " F4B"右對齊,大寫16 進制,寬度占5 個位置
2) 浮點數格式化輸出
如果要將浮點數字 3.915 保存到字符串str中
sprintf(str,"%f",3.915); // "3.915" 這是最基本的輸出,顯示完整的數字
sprintf(str,"%.2f",3.915); // "3.92" 保留二位小數,注意的一點是,這里是四舍五入,面不是像取整那樣丟掉小數位.但還存在一個問題,就是當前面的整數部分數據大時,也有可能直接丟掉后面位.
對于數字轉字符串還有一個要注意的問題,就是后面數字的類型不一值的時候就可能得不到你想要的結果,需要強制轉換一下,如:
int ii = 3915;
sprintf(str,"%f",ii); // 這樣你就會遇到傳聞中的R6002,float point not load 的錯誤,我在VS中寫C++命令行程序,直接一閃而過,斷點之類的都沒用.可以改成:
sprintf(str,"%f",(float)ii); // 這樣就正常以浮點輸出了
3) 字符串的格式化輸出
如果要將字符串"guoke"保存到字符串str中
sprintf(str,"%s","guoke"); // "guoke"最基本的,直接copy
sprintf(str,"%6s","guoke"); // " guoke" 右對齊,超出時,輸出全部字符串
sprintf(str,"%.3s","guoke"); // " guo" 只讀取字前三個字符,如果字符串不足3個取全部
sprintf(str,"%-6s","guoke"); // "guoke " 左對齊,超出時,輸出全部字符串
sprintf(str,"%6.3s","guoke"); // " guo" 右對齊,寬寬6,只取字符串前3個字符.如果字符串不足3個取全部
sprintf(str,"%-6.3s","guoke"); // "guo " 左對齊,寬寬6,只取字符串前3個字符.如果字符串不足3個取全部
sprintf(str,"%3.6s","guoke"); // "guoke" 這樣感覺好像沒什么大的作用,當所取的字符串長度大于3是還是會輸出全部字符串的.