記錄一次入坑的linux下c語言解析txt檔案

2021-08-14 10:11:50 字數 1140 閱讀 2067

一、讀取檔案中的一行

讀取txt檔案比較簡單:

file* conf_file= fopen(conffile, "r");

char conf_line[512];

while (fgets(conf_line, sizeof(conf_line), conf_file)!=null)

關鍵函式就是fgets()

fgets(…)讀入文字行時的兩種情況。

1.如果n大於一行的字串長度,那麼當讀到字串末尾的換行符時,fgets(..)會返回。並且在s的最後插入字串結束標誌』\0』。 而s緩衝區剩餘的位置不會再填充。

example

:123abc

fgets(s,10,fp);

此時,讀入七個字元,123abc\n,實際上還有最後的』\0』,所以,strlen(s)=7; 如果要去除末尾的\n,s[strlen(s)-1]=』\0』;便可。

2.如果n小於等於一行的字串的長度,那麼讀入n-1個字元,此時並沒有讀入\n因為並沒有到行尾 ,同樣在最後會插入』\0』.

example

:123abc

fgets(s,5,fp);

這時讀入4個字元,123a,並沒有換行符,所以strlen(s)=4.

二、解析檔案中的一行

需要使用

sscanf(conf_line,"%[^,],%[^,],%s",pnew->station,pnew->name,pnew->cropnm);
注意,這裡後面用來存放字串的陣列,一定要夠大,坑就在於這裡:陣列長度沒有存放』\0』的地方,執行後一直出現奇怪的解析結果。5位的陣列,解析後居然是10幾個字元,明顯不對,後來檢查是陣列設定的長度不夠。

三、鍊錶存放配置檔案

struct conf_st

;

struct conf_st *get_conf(char conffile)

fclose(conf_file);

return phead;

}

讀入乙個檔案,然後按行解析,最後返回煉表頭。

記錄一次可能的坑爹bug除錯記錄

data publish time date y m d h i s 因為h 的範圍是0 12,之前寫 是在上午,所以不會發現問題 最後做了這樣的實驗,才發現了最終問題 正確寫法 data publish time date y m dh i s date default timezone set ...

記一次連線虛擬機器Linux的一次坑!!!

連線虛擬機器可把我折磨慘了。最開始是在網路介面卡中都沒有vm8和vm1的驅動,怎麼搞都搞不好了,自己又重灌了一次電腦。重灌後又安裝了一次,介面卡這回正常了,然後又是測試虛擬機器和本地相互ping,但是本地ping不到虛擬機器,就按照網上的關上了虛擬機器的防火牆。然後又測試了ssh ssh local...

記錄一次使用 thinkphp 框架 踩的坑

開始使用的時候 thinkphp預設非除錯時 不列印錯誤 需要自己開啟 顯示錯誤資訊 show error msg true,把false 改為 true即可開到錯誤型別 具體詳細的資訊還是需要debug 或者try catch 在使用 db的時候 一直報 could not find driver...