作者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