请教各位大神,有没有更好的方法代替strtok()
#define MAX 80
File *fpa,*fpb;
int chodp()
{
FILE *ftemp;
int i,flag;
char elenum[MAX],*s0,*s1,*s2,*s3,*s4,*s5,*s6,*s7,s[4][MAX];
fprintf(fpb,"===========================================================================\n");
fprintf(fpb,"检查计费指针是否变化(CHODP:FN=ALL)\n");
rewind(fpa);
while (!feof(fpa))
{
fgets(buf,MAX,fpa);
if(strstr(buf,"*** Connected to")!=NULL)
{
strcpy(buf2,buf);
s1=strtok(buf," "); //慎用strtok函数,慎用!容易出现问题
for(i=0;i<3;i++)
s1=strtok(NULL," ");
strcpy(elenum,s1);
strcpy(buf,buf2);
}
while(strstr(buf,"COMMON CHARGING OUTPUT CHARGEABLE DURATION DATA")!=NULL) //找到特征字符,开始
{
flag=0;
for(i=0;i<3;i++)
fgets(s1,MAX,fpa);
for(i=0;i<2;i++)
fgets(s[i],MAX,fpa);
for(i=0;i<3;i++)
fgets(s1,MAX,fpa);
ftemp=fpa;
fgets(s2,MAX,fpa);
fgets(s3,MAX,fpa);
if(strstr(s1,"<CHODP:FN=ALL;")==NULL&&strstr(s2,"<CHODP:FN=ALL;")==NULL&&strstr(s3,"<CHODP:FN=ALL;")==NULL)
{
fprintf(fpb,"%7s OSS执行CHODP指令失败,无法对比计费指针,请重新手工检查!\n",elenum);
fpa=ftemp;
break;
}
for(i=0;i<3;i++)
fgets(s1,MAX,fpa);
for(i=0;i<2;i++)
fgets(s[i+2],MAX,fpa);
// fprintf(fpb,"%s%s%s%s\n",s[0],s[1],s[2],s[3]);
s0=strtok(s[0]," ");
s0=strtok(NULL," "); //s0
s1=strtok(NULL," "); //s1
s2=strtok(s[1]," "); //
s2=strtok(NULL," "); //s2
s3=strtok(NULL," "); //s3
s4=strtok(s[2]," "); //
s4=strtok(NULL," "); //s4
s5=strtok(NULL," "); //s5
s6=strtok(s[3]," "); //
s6=strtok(NULL," "); //s6
s7=strtok(NULL," "); //s7
// fprintf(fpb,"%s,%s,%s,%s,%s,%s,%s,%s\n",s0,s1,s2,s3,s4,s5,s6,s7);
if(((strcmp(s2,s6)==0&&strcmp(s3,s7)==0)&&(strcmp(s0,s4)==0||strcmp(s1,s5)==0))||((strcmp(s0,s4)==0&&strcmp(s1,s5)==0)&&(strcmp(s2,s6)==0||strcmp(s3,s7)==0)))
{
if(flag==0)
fprintf(fpb,"%7s 状态异常\n",elenum);
flag=1;
}
else
fprintf(fpb,"%7s 正常\n",elenum);
}
}
return 0;
}
如此使用char *s0,*s1,*s2,*s3,*s4,*s5,*s6,*s7肯定有问题,特别是strtok()破坏性太大了,请问各位大神,有没有更好的方法?