[問題] strok產生的錯誤

看板C_and_CPP (C/C++)作者 (jufeng)時間16年前 (2009/04/05 12:39), 編輯推噓0(0031)
留言31則, 5人參與, 最新討論串1/1
下面部分程式是在linux下寫的,產生的問題希望板友能提供解答。 .control部分內容 NUNFIL=2048 DELTAT=4.0000e-04 lcoord=9 lcsv=0 lps=8 ltable=7 void gepfile::choice_controlfile(lcm_para *mom) { .... FILE *in; in=fopen(buffer,"r"); //buffer 檔案路徑P*.control char temp[200]; char *p; while(fgets(temp,sizeof(temp),in)) { if(temp[0]!='l') continue; p=strtok(temp,"="); if(strcmp(p,"lps")==0) { p=strtok(NULL,"\r\n"); mom->_ps =p; //想要把p的值丟到_ps裡,這樣寫法會有問題, 但是該怎麼解決呢? } } 寫在.h內 struct lcm_para{ char subbas; char _coord; char _ps; ... } 想要將p得到的東西丟到_ps內,_ps在struct內的型態是char,但是卻發生錯誤 invalid conversion from 'char*' to 'char' 利用了c_str與stringstream等方法,卻還是無法得到結果。 請各位高手是否能提供一些意見。謝謝各位。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.129.120.220 ※ 編輯: jufeng 來自: 220.129.120.220 (04/05 12:46)

04/05 12:52, , 1F
lcm_para 的 definition ?
04/05 12:52, 1F
※ 編輯: jufeng 來自: 220.129.120.220 (04/05 12:58) ※ 編輯: jufeng 來自: 220.129.120.220 (04/05 13:10)

04/05 13:16, , 2F
p是指標,不是值.
04/05 13:16, 2F

04/05 13:17, , 3F
試試 mom->_ps = *p
04/05 13:17, 3F

04/05 13:18, , 4F
你的error message指的是這件事。
04/05 13:18, 4F

04/05 13:19, , 5F
另外有個無關的linus下的換是\r\n嗎?我記得這是win的
04/05 13:19, 5F

04/05 13:20, , 6F
我沒用過liuns,可是之前聽說linus和win換行是不一樣的
04/05 13:20, 6F

04/05 13:22, , 7F
好像是只有\n還是\r而已。
04/05 13:22, 7F

04/05 13:23, , 8F
Linux作業系統...Linus是一個人 XDDD
04/05 13:23, 8F

04/05 13:23, , 9F
打錯...
04/05 13:23, 9F

04/05 13:57, , 10F
tsa大的方法compiler會過但執行會產生"程式記憶體區段錯誤"
04/05 13:57, 10F

04/05 13:58, , 11F
mom->_ps = p[0]; 這樣呢?
04/05 13:58, 11F

04/05 14:00, , 12F
你確認一下回傳的p是不是null,也就是strtok有沒有正
04/05 14:00, 12F

04/05 14:00, , 13F
確回傳
04/05 14:00, 13F

04/05 14:01, , 14F
如果回傳沒問題的話,那出問題的就不是在這裡吧。
04/05 14:01, 14F

04/05 14:05, , 15F
如果回傳是NULL, 就檢查一下liunx換行是不是弄錯了
04/05 14:05, 15F

04/05 14:06, , 16F
或把讀入的檔案丟出來,讓人看一下
04/05 14:06, 16F

04/05 14:10, , 17F
cout<<p<<endl; result=>8,strok是沒有問題的
04/05 14:10, 17F
※ 編輯: jufeng 來自: 220.129.120.220 (04/05 14:12)

04/05 14:13, , 18F
文件檔已列出
04/05 14:13, 18F

04/05 15:50, , 19F
我試了這段程式碼,沒問題
04/05 15:50, 19F

04/05 15:51, , 20F
那再問一下,你傳進來的指標mom有事先給實體嗎?
04/05 15:51, 20F

04/05 15:52, , 21F
還是只傳了一個指標進來?如果這也沒問題的話
04/05 15:52, 21F

04/05 15:52, , 22F
我想出問題的不是這裡吧。
04/05 15:52, 22F

04/05 16:50, , 23F
\r\n是因為在linux下往往會把DOS換行解釋成這樣
04/05 16:50, 23F

04/05 16:52, , 24F
Linux換行只用一個\n,DOS換行才是\r\n,但一般而言在
04/05 16:52, 24F

04/05 16:52, , 25F
處理自己系統的native text file的時候只需要寫個\n
04/05 16:52, 25F

04/05 16:53, , 26F
當中的轉換是transparent的。只有碰到檔案跨系統使用才
04/05 16:53, 26F

04/05 16:53, , 27F
會有此問題。
04/05 16:53, 27F

04/05 18:07, , 28F
問題已解決了,是我自己指標沒有寫好,麻煩各位了
04/05 18:07, 28F

04/05 18:07, , 29F
真的非常謝謝各位
04/05 18:07, 29F

04/05 18:10, , 30F
所以問題是什麼?
04/05 18:10, 30F

04/05 18:34, , 31F
未給controlfile記憶體的區段
04/05 18:34, 31F
文章代碼(AID): #19s3OD77 (C_and_CPP)
文章代碼(AID): #19s3OD77 (C_and_CPP)