在C/C++開發中容易被忽略卻比較有用的兩個函數


呵呵,標題寫法有些以己度人的意思,也許別人都不需要我多余的提醒.但我轉念一想,自己犯過的錯誤別人也許也會犯,因此還是贅述一下,不賣關子了,這兩個函數是"sprintf"和"sscanf",已經通曉這兩個函數的達人請速速離開,多留無益. 由於高級語言的影響和MFC,STL對C++類庫的擴充,以及人習慣用自己熟悉的方法手段解決問題習性的影響,一些很有用的C基本函數常常被大家遺忘,在許多場合這沒有什么,大家自有替代的方法,但是在特殊場合卻會掉鏈子,自己寫函數又不方便又不安全,有造成無謂損失的危險,所以這里我提醒一下大家注意一下"sprintf"和’’sscanf"兩個函數的使用. 1.函數sprintf:將參數以固定格式輸出到字符數組中,此數組以空結尾,sprintf不對數組進行邊界檢查,如果sprintf()生成的輸出大於數組的容量,將造成溢出. 例:在str中放置"One A 10" char str[255]; sprintf(str,"%s %c %d","One",’A’,10); 2.函數sscanf:相當與sprintf的反函數,它是將數組中的字符串按固定格式讀取到變量中,返回值是實際賦值的變量數,其中不包括*號跳過的域,零代表未賦值域,EOF表示第一次賦值前已經出錯. 例:從字符串數組"One A 10"讀入到一個字符串變量,一個字符變量,一個整型變量中. char strSrc[]="One A 10"; char strDest[6]; char cDest; int nDest; sscanf("One A 10","%s %c %d",strDest,&cDest,&nDest); 完畢后一個字符串變量,一個字符變量,一個整型變量將分別取到"One",’A’,10的值. 這兩個函數在字符串的整合和分解將起到很大的作用,絕對不亞於CString類的Format方法,你可以試試我說的是真是假.

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com