1

2 つのテキスト ファイルの文字列を比較する必要があります。(どちらかのファイルに対して)を使用して文字列を分離しているstrtok()ときに、 を使用して 2 つのファイルの文を参照しているときに問題が発生し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;                    
}

両方の入力ファイルからトークンを抽出できるように、このコードを修正するにはどうすればよいですか?

4

3 に答える 3

3

strtok() は衝突するグローバルな内部値を使用します。strtok_s() を使用してそれを防ぎます。その関数は、2 つのインスタンスを別々に保持する参照変数を取るためです。

于 2012-08-10T15:33:38.323 に答える
2

strtok解析中の文字列への静的ポインターを使用するため、一度にアクティブにできる呼び出しは 1 つだけです。

私はおそらくただ使用します:

char buffera[5000];
char bufferb[5000];

fscanf(fp, "%4999s", buffera);
// ...
fscanf(fp, "%4999s", bufferb);
于 2012-08-10T15:35:35.563 に答える