免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3650 | 回复: 9
打印 上一主题 下一主题

不能正常使用 strstr !! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-09-13 11:32 |只看该作者 |倒序浏览
现在有这样一个文件,其内容如下:

>>>>>>>>>>>>>>>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");  则为正确的结果

请问那位知道这是怎么回事?
和什么双字符有关系么?

论坛徽章:
0
2 [报告]
发表于 2006-09-13 12:20 |只看该作者
确认你已经把"One Begin"读进pcurrent了
确认"One Begin" 之前没有字符串结束符

论坛徽章:
1
射手座
日期:2013-09-30 15:24:05
3 [报告]
发表于 2006-09-13 12:39 |只看该作者
贴代码,肯定是那不对!

论坛徽章:
0
4 [报告]
发表于 2006-09-13 12:39 |只看该作者
ptmp1 = strstr(pcurrent1, "One Begin"); 为null
ptmp2 = strstr(pcurrent2, "One Over");  则为正确的结果



分配两个 char buff[2048]; 试试

怀疑是不是被覆盖了。

论坛徽章:
0
5 [报告]
发表于 2006-09-13 13:28 |只看该作者
估计又是把字符串分两部分读进来的。

论坛徽章:
0
6 [报告]
发表于 2006-09-13 13:40 |只看该作者
fprintf(stderr, "%s\n", pcurrent);
先看看有没有你要字符串.

论坛徽章:
0
7 [报告]
发表于 2006-09-13 15:25 |只看该作者
谢谢大家
谢谢 nnnqpnnn
我找到原因了,是因为提前出现了字符结束符,就是在这个地方,
“AckPktHead.morepkt        = = ”
那两个等号之间的空居然是一个结束符 靠

to JohnBull
你说的问题,我在程序中设法避免的了 因此没有这个情况

论坛徽章:
0
8 [报告]
发表于 2006-09-13 15:29 |只看该作者
中午睡觉,总是想这个
起来调试,找到原因

那么像这种文件里面出现 结束符的
就不能使用strstr了?

是不是需要自己写一个函数,首先确定字符串的长度,而不管有没有结束符了

[ 本帖最后由 lostiger 于 2006-9-13 15:30 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2006-09-13 20:56 |只看该作者
大家是怎么处理这种 “提前出现了字符结束符”
的情况的?

论坛徽章:
0
10 [报告]
发表于 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;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP