免费注册 查看新帖 |

Chinaunix

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

高手请进, 一个怪程序,调用strtok,但入口的数组被变 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-10-22 10:42 |只看该作者 |倒序浏览
下面就是这个程序, GetPkgValue 只能调用一次, 这样得到的值是正确的, 但调用第二次时 就错了, 后来发现在第一次调用中 入口数组buf 的值被变了。 ???????  
  
---------------------------
#include <stdio.h>;
#include <stdlib.h>;
#include <string.h>;

int GetPkgValue( char *buf,  char *tag_name, char value[]);

void main( void )
{
char buf[2048]= "{1:00054101000000000016                    2003071517535810020030526}{2:1000000             }{3::30A:20030526:32A:RMB000000510385484:011:102521009993:52A:102521009993:CC4:102521009993:50C:06205729409859661382276023334095:50A:客户一                                                      :50B:中华人民共和国:012:313161000011:58A:313161001011:CC5:313161001011:59C:58848850601918703254642093075515:59A:客户六                                                      :59B:中华人民共和国:CEF:40:0BC:00000013:010:5210:0B9:1610:72A:自动生成的测试实例100}";

char tag_name[10]="30A";
char value[200];

GetPkgValue( buf,  tag_name, value);

printf("---%s----%s---\n", tag_name, value );
memset( value, 0x00, sizeof( value) );  

strcpy( tag_name, "32A";
GetPkgValue( buf,  tag_name, value);

printf("---%s----%s---\n", tag_name, value );
}

int GetPkgValue( char *buf,  char *tag_name, char value[])
{
  char *p=NULL;
  int i=0;
  char *f=NULL;
  int returnVal = 1 ;
  
  p = strstr( buf, "{3:" );
  if ( p==NULL )
  {   printf(" ----GetPkgValue  error occur \n" );
      return returnVal;
  }
  p+=3;

  while(1)
  {
   if( i==0 )   f=strtok( p, ":}";
   else         f=strtok( NULL, ":}";

   if(!f)      break;

   if( i%2 == 0 )
       if( strncmp( tag_name, f, 3)==0  )
       {    strcpy( value, strtok( NULL, ":}");
            returnVal = 0;
            break;
       }

   i++;
  }

  return returnVal;
}

论坛徽章:
0
2 [报告]
发表于 2003-10-22 11:05 |只看该作者

高手请进, 一个怪程序,调用strtok,但入口的数组被变

  1. char *strtok(char *s1, const char *s2)
复制代码

strtok在s1中找按s2分割的子字符串,当找到了一个,strtok会将当前找到的s1中的s2子串替换为"\0"!
所以你下次重新来过的时候,buf里面的内容已经改变了。

可以用memcpy或strncpy拷贝一份进行strtok操作
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP