劇多
首頁
資訊
體育
娛樂
汽車
投資
財經
軍事
科技
數碼
科學
遊戲
歷史
健康
政治
影視
旅遊
育兒
美食
時尚
房產
農業
社會
文化
教育
技術
美文
情感
故事
家居
職場
自然
闢謠
心理
攝影
漫畫
生活
其它
Club
Tips
熱門話題
搜尋
註冊
登入
首頁
>
Club
>
單鑫
2021-01-20 17:14
C++中如何用sprintf()把string型別輸入到char[]型別中?
14
回覆列表
1 # 使用者6639509678389
簡單、直接。其實大部分情況下,buf需要的長度都是可以預計的。更何況c99之後有了vla(c99之前,gcc也可以用),做一些臨時串其實很方便:
而如果少數情況很難準確事先預計的,例如說最常見的情景應該是sprintf/snprintf,其實可以用open_memstream來代替:對了,open_memstream同一頁man中,還介紹另一個很好玩的函式:fmemopen。這個函式可以傳入一個指定長度的buf,返回一個FILE*,完全可以當成一個檔案緩衝區用。所以說到這裡,字元陣列就比string又有一個新的優勢:跟各種庫函式可以很無縫的對接。其實這也間接得益於簡單直接,所以不需要繞過那麼多的封裝,可以直奔主題。另外,還能做一些技巧:例如說有時候測試時,想輸出字串的前N個字元比對一下,那可以用這樣的程式碼:其實,如果確信str指向的地址是可寫的,而且同時沒其他執行緒在用,哪怕str是const修飾的,都可以暴力的給轉一下。所以,除了拿來做例如拼接頁面等十分頻繁的字串操作外,string不見得有多少優勢。其實只要記憶體夠大,用open_memstream,恐怕也未必比string慢。當然,如果考慮到頁面拼接完之後是要傳送到socket去的話,直接dprintf就好了。
發表回復
∧
中秋節和大豐收的關聯?
∨
狗狗要打哪些疫苗?
熱門排行
星露谷桑迪住哪裡?
三星s23ultra是3d結構光識別嗎?
節能柴火灶的建造方法與尺寸?
mybmw為什麼說我添加了車架號?
大人能帶長命鎖嗎?
carxstreet亞洲為什麼進不去?
20kw儲能方案?
葡萄糖脫氫酶和氧化酶哪個準確?
監測戶要交新農合嗎?
橡木板和多層實木板哪個好?
簡單、直接。其實大部分情況下,buf需要的長度都是可以預計的。更何況c99之後有了vla(c99之前,gcc也可以用),做一些臨時串其實很方便:
而如果少數情況很難準確事先預計的,例如說最常見的情景應該是sprintf/snprintf,其實可以用open_memstream來代替:對了,open_memstream同一頁man中,還介紹另一個很好玩的函式:fmemopen。這個函式可以傳入一個指定長度的buf,返回一個FILE*,完全可以當成一個檔案緩衝區用。所以說到這裡,字元陣列就比string又有一個新的優勢:跟各種庫函式可以很無縫的對接。其實這也間接得益於簡單直接,所以不需要繞過那麼多的封裝,可以直奔主題。另外,還能做一些技巧:例如說有時候測試時,想輸出字串的前N個字元比對一下,那可以用這樣的程式碼:其實,如果確信str指向的地址是可寫的,而且同時沒其他執行緒在用,哪怕str是const修飾的,都可以暴力的給轉一下。所以,除了拿來做例如拼接頁面等十分頻繁的字串操作外,string不見得有多少優勢。其實只要記憶體夠大,用open_memstream,恐怕也未必比string慢。當然,如果考慮到頁面拼接完之後是要傳送到socket去的話,直接dprintf就好了。