回覆列表
  • 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就好了。

  • 中秋節和大豐收的關聯?
  • 狗狗要打哪些疫苗?