Chinaunix
标题:
不能正常使用 strstr !!
[打印本页]
作者:
lostiger
时间:
2006-09-13 11:32
标题:
不能正常使用 strstr !!
现在有这样一个文件,其内容如下:
>>>>>>>>>>>>>>>One Over[20060907-083448]<<<<<<<<<<<<<<<<<
read ackhead. i=95 == headlen=95=
AckPktHead.len =124=
AckPktHead.factorycode ==
AckPktHead.progid =5=
AckPktHead.morepkt = =
AckPktHead.cmd_id =10012=
AckPktHead.start_num =0=
AckPktHead.end_num =0=
AckPktHead.request_id =186=
AckPktHead.answer_id =0=
AckPktHead.sequence =0=
AckPktHead.rec_seperator =;=
AckPktHead.field_seperator=~=
AckPktHead.reserved1 =0=
AckPktHead.reserved2 =0=
AckPktHead.reserved3 ==
>>>>>>>>>>>>>>>One Begin[20060907-083459]<<<<<<<<<<<<<<<<<
read ack body. i=29 == bodylen=29=
AckPktBody.errorcode=0=
AckPktBody.datatrans=13528919566~FS0AAAF0002~0~2=
InStr[00]=13528919566=
InStr[01]=FS0AAAF0002=
现在想用strstr查找它的子串---One Over和One Begin
我分配了一个 char buff[2048];
的空间,读入文件内容
结果发现:
ptmp1 = strstr(pcurrent, "One Begin"); 为null
ptmp2 = strstr(pcurrent, "One Over"); 则为正确的结果
请问那位知道这是怎么回事?
和什么双字符有关系么?
作者:
nnnqpnnn
时间:
2006-09-13 12:20
确认你已经把"One Begin"读进pcurrent了
确认"One Begin" 之前没有字符串结束符
作者:
dlms
时间:
2006-09-13 12:39
贴代码,肯定是那不对!
作者:
lonelyair
时间:
2006-09-13 12:39
ptmp1 = strstr(pcurrent
1
, "One Begin"); 为null
ptmp2 = strstr(pcurrent
2
, "One Over"); 则为正确的结果
分配两个 char buff[2048]; 试试
怀疑是不是被覆盖了。
作者:
JohnBull
时间:
2006-09-13 13:28
估计又是把字符串分两部分读进来的。
作者:
sttty
时间:
2006-09-13 13:40
fprintf(stderr, "%s\n", pcurrent);
先看看有没有你要字符串.
作者:
lostiger
时间:
2006-09-13 15:25
谢谢大家
谢谢 nnnqpnnn
我找到原因了,是因为提前出现了字符结束符,就是在这个地方,
“AckPktHead.morepkt = = ”
那两个等号之间的空居然是一个结束符 靠
to JohnBull
你说的问题,我在程序中设法避免的了 因此没有这个情况
作者:
lostiger
时间:
2006-09-13 15:29
中午睡觉,总是想这个
起来调试,找到原因
那么像这种文件里面出现 结束符的
就不能使用strstr了?
是不是需要自己写一个函数,首先确定字符串的长度,而不管有没有结束符了
[
本帖最后由 lostiger 于 2006-9-13 15:30 编辑
]
作者:
lostiger
时间:
2006-09-13 20:56
大家是怎么处理这种 “提前出现了字符结束符”
的情况的?
作者:
sydby
时间:
2006-11-16 19:24
修改strstr函数原型:
原来是这样的:
char * strstr(const char * s1,const char * s2)
{
int l1, l2;
l2 = strlen(s2);
if (!l2)
return (char *) s1;
l1 = strlen(s1);
while (l1 >= l2) {
l1--;
if (!memcmp(s1,s2,l2))
return (char *) s1;
s1++;
}
return NULL;
}
修改成这样就好了:
char * mystrstr(const char * s1,const char * s2,int l1,int l2)
{
if (!l2)
return (char *) s1;
while (l1 >= l2) {
l1--;
if (!memcmp(s1,s2,l2))
return (char *) s1;
s1++;
}
return NULL;
}
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2