我需要比较两个文本文件中的字符串。在使用strtok()
(对于任一文件)分隔字符串时,我在使用strtok()
时使用#include <stdio.h>
#include <string.h>
#include <conio.h>
int main()
{
FILE *fp,*fp1,*fp2;
fp=fopen("inp1.txt","r");
fp1=fopen("inp2t.txt","r");
int f;
char *a,*b,*chk;
char buffer[500],buf[5000];
while(fgets(buf,5000,fp1));
{
chk= (char *)strtok (buf," ");
while(chk!=NULL)
{
rewind(fp);
f=0;
while(fgets(buffer,500,fp))
{
a= (char *) strtok(buffer,"\t");
b= (char *) strtok(NULL,"\n");
if(stricmp(a,chk)==0)
{
printf("%s",b);
printf(" ");
f=1;
}
}
if(f==0)
{
printf("%s",chk);
printf(" ");
}
chk= (char *) strtok(NULL," ");
}
}
fclose(fp);
fclose(fp1);
getch();
return 0;
}
引用两个文件中的句子时遇到问题,因为它们正在发生冲突。
{{1}}
如何修复此代码,以便我能够从两个输入文件中提取标记?
答案 0 :(得分:3)
strtok()使用全局内部值,它将发生冲突。使用strtok_s()来防止这种情况,因为该函数接受一个将两个实例分开的引用变量。
答案 1 :(得分:2)
strtok
使用指向要解析的字符串的静态指针,因此在任何给定时间只能对其进行一次调用。
我可能只是使用:
char buffera[5000];
char bufferb[5000];
fscanf(fp, "%4999s", buffera);
// ...
fscanf(fp, "%4999s", bufferb);
答案 2 :(得分:0)
strtok有一个记住最后位置的内部状态。 strtok_r()是strtok()的可重入版本。检查您的平台上是否可以使用它。