使用strtok()比较两个字符串

时间:2012-08-10 15:30:02

标签: c string file strtok

我需要比较两个文本文件中的字符串。在使用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}}

如何修复此代码,以便我能够从两个输入文件中提取标记?

3 个答案:

答案 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()的可重入版本。检查您的平台上是否可以使用它。