作者jufeng (jufeng)
看板C_and_CPP
標題[問題] strok產生的錯誤
時間Sun Apr 5 12:39:40 2009
下面部分程式是在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)
1F:→ in09:lcm_para 的 definition ? 04/05 12:52
※ 編輯: jufeng 來自: 220.129.120.220 (04/05 12:58)
※ 編輯: jufeng 來自: 220.129.120.220 (04/05 13:10)
2F:→ tsaiminghan:p是指標,不是值. 04/05 13:16
3F:→ tsaiminghan:試試 mom->_ps = *p 04/05 13:17
4F:→ tsaiminghan:你的error message指的是這件事。 04/05 13:18
5F:→ tsaiminghan:另外有個無關的linus下的換是\r\n嗎?我記得這是win的 04/05 13:19
6F:→ tsaiminghan:我沒用過liuns,可是之前聽說linus和win換行是不一樣的 04/05 13:20
7F:→ tsaiminghan:好像是只有\n還是\r而已。 04/05 13:22
8F:→ james732:Linux作業系統...Linus是一個人 XDDD 04/05 13:23
9F:→ tsaiminghan:打錯... 04/05 13:23
10F:→ jufeng:tsa大的方法compiler會過但執行會產生"程式記憶體區段錯誤" 04/05 13:57
11F:→ james732:mom->_ps = p[0]; 這樣呢? 04/05 13:58
12F:→ tsaiminghan:你確認一下回傳的p是不是null,也就是strtok有沒有正 04/05 14:00
13F:→ tsaiminghan:確回傳 04/05 14:00
14F:→ tsaiminghan:如果回傳沒問題的話,那出問題的就不是在這裡吧。 04/05 14:01
15F:→ tsaiminghan:如果回傳是NULL, 就檢查一下liunx換行是不是弄錯了 04/05 14:05
16F:→ tsaiminghan:或把讀入的檔案丟出來,讓人看一下 04/05 14:06
17F:→ jufeng:cout<<p<<endl; result=>8,strok是沒有問題的 04/05 14:10
※ 編輯: jufeng 來自: 220.129.120.220 (04/05 14:12)
18F:→ jufeng:文件檔已列出 04/05 14:13
19F:→ tsaiminghan:我試了這段程式碼,沒問題 04/05 15:50
20F:→ tsaiminghan:那再問一下,你傳進來的指標mom有事先給實體嗎? 04/05 15:51
21F:→ tsaiminghan:還是只傳了一個指標進來?如果這也沒問題的話 04/05 15:52
22F:→ tsaiminghan:我想出問題的不是這裡吧。 04/05 15:52
23F:→ MOONRAKER:\r\n是因為在linux下往往會把DOS換行解釋成這樣 04/05 16:50
24F:→ MOONRAKER:Linux換行只用一個\n,DOS換行才是\r\n,但一般而言在 04/05 16:52
25F:→ MOONRAKER:處理自己系統的native text file的時候只需要寫個\n 04/05 16:52
26F:→ MOONRAKER:當中的轉換是transparent的。只有碰到檔案跨系統使用才 04/05 16:53
27F:→ MOONRAKER:會有此問題。 04/05 16:53
28F:→ jufeng:問題已解決了,是我自己指標沒有寫好,麻煩各位了 04/05 18:07
29F:→ jufeng:真的非常謝謝各位 04/05 18:07
30F:→ tsaiminghan:所以問題是什麼? 04/05 18:10
31F:→ jufeng:未給controlfile記憶體的區段 04/05 18:34