假設我們現在正在開發一款文檔管理類軟件。其中一項功能就是一次性創建多個名稱連續的文件夾,如Icon1、 Icon2等等。整個名稱可以分作兩部分,前半部分是常量字符串"Icon",后半部分是編號字符串。在使用循環語句生成名稱時,編號是數字,如果能將編號轉換為一個字符串,那么我們就可以用strcat函數將兩部分組合起來,然后使用mkdir創建文件夾即可。因此,現階段問題就變成了如何把數字轉換為對應的字符。
原始社會
現在又到了查看ASCII碼表的時候了,通過查表我們可以看到,字符'0',對應的ASCII碼是48,也就是說數值48,轉換為char類型就是字符'0',根據這個簡單的對應關系,我們就可以生成名稱了。


我們輸出編號從0-9的名稱,整體效果還不錯。不過,我想你也看到局限性了,如果要生成編號大于10的名稱,這個程序就像小孩數指頭做算術一樣,不夠用了。
二階文明
在這一文明階段的,我們的思考認知能力有了巨大的提升,我們希望能根據指定的一個區間生成對應的名稱,如Icon17到Icon35,同時還希望前導名稱能夠指定,就像是Name999-Name1234一樣。同樣,最關鍵的問題還是數值到字符串的轉換,因為現在的數值范圍更大了,需要的處理也就更多了。讓我們嘗試編寫一個函數去解決這個問題。

注釋中【相當于num-=factory】有誤


三階文明:itoa
現在我們進化到了三階文明,在這一階段,我們不再需要自己編寫復雜的數值轉換字符串函數了。而是使用本階文明提供的函數來完明,這個函數就是itoa,它由stdlib.h提供。
原型名:char*itoa( int value, char *string, int radix );
value是被轉換的整數,string是轉換后儲存的字符數組,radix是轉換進制數,如2,8,10,16進制。

終極文明
想想看,如果我們僅僅是要輸出符合要求的名稱,那么使用 printf("Icon%d", 83); 之類的語句即可達到要求。在這一文明階段,C語言運行時庫進化出了格式化字符串函數sprintf。
不同于printf將信息輸出到屏幕(確切的說是標準輸出),sprintf將格式化后的字符串輸出到對應的字符數組,一擊達到目的,其相應的安全版本是sprintf_s。同printf一樣,可以使用格式化控制符,可以幫助我們生成補齊的文件夾名稱。在運行完這個程序后,轉到對應的工程目錄,你會發現Icon98 Icon99... 靜靜的躺在那兒。


通過這節內容的學習,希望能幫助你更深刻的理解ASCII碼表、更好的操作數組,熟悉C提供的字符串函數。對于C語言字符串函數,建議你更多的使用其安全版本。最后要說明的是,做為練習,你可以寫一個數字轉換為字符串的函數;做為開發,你可以先去查找語言提供的庫是否包含有你需要的功能,有,就用它!