linux下fprintf寫入檔案亂碼

2021-08-28 07:29:53 字數 754 閱讀 2037

筆者最近經常在linux下執行一些c++程式,每次用fprintf將string型別的結果寫入檔案時,編譯以後總會出現

警告:cannot pass objects of non-pod type 『const struct std::basic_string, std::allocator>』 through 『...』

開始覺得警告不影響執行就沒有在意,但是寫入的txt檔案裡面所有string型別的內容總是亂碼。

細細看了一下警告,將fprintf(file,"%s,%u,%u,%u\n",map_it->first,res_vec[0],res_vec[1],res_vec[2]);

改為fprintf(file,"%s,%u,%u,%u\n",map_it->first.c_str(),res_vec[0],res_vec[1],res_vec[2]);

map定義為  map

這樣就不會警告了

還要注意的是,將linux下生成的檔案傳輸到windows之前,要在vim下進行  set ff=dos

將檔案格式設定為dos

fprintf是c/c++中的乙個格式化寫-庫函式,其作用是格式輸出到乙個流/檔案中;原型是int fprintf( file *stream, const char *format, [ argument ]...),fprintf()函式根據指定的format(格式)傳送資訊(引數)到由stream(流)指定的檔案。在寫入string時可能會發生某些格式轉換,這樣就會出現亂碼,所以轉化成const char*的格式

Linux下建立 開啟 寫入檔案操作

linux下既然把所有的裝置都看作檔案來處理,就要熟練使用linux下檔案操作的相關api。include include include include define length 100 int main int argc,char argv content argv 1 fd open pat...

Linux下Makefile快速編寫入門

一 為什麼要編寫makefile 我們自己平常在linux下編譯原始檔時,當然可以使用gcc wall g main.c o main這樣的命令乙個乙個編譯,但是乙個工程中的原始檔不計其數,其按型別 功能 模組分別放在若干個目錄中,我們乙個個編譯是極其花費時間的,也是不可取的。makefile帶來的...

Linux下Makefile快速編寫入門

一 為什麼要編寫makefile 我們自己平常在linux下編譯原始檔時,當然可以使用gcc wall g main.c o main這樣的命令乙個乙個編譯,但是乙個工程中的原始檔不計其數,其按型別 功能 模組分別放在若干個目錄中,我們乙個個編譯是極其花費時間的,也是不可取的。makefile帶來的...