-4

このCコードも更新されるため、重複なしで機能する理由を知りたいのですpが、入れるwind_w[i]重複が必要ですか?

#include<stdio.h>
#include<string.h>
#define MAX 132
#define MAXW 30
int Len_w[MAXW];
int Max_V(int vf[], int len);
main()
{
    char s[MAX+1], w[MAXW], *Ind_w[MAXW],*p,out[MAXW];
    int k=0, i=0, Maximum, g=0;
    p=s;
    printf("\nInsert the line....\n");
    fgets(s,MAX,stdin);

    while(sscanf(p,"%s%n",w,&k)==1){
        Len_w[i] = strlen(w);
        Ind_w[i] = p;
        p+=k;
        i++;
    }
    Maximum = Max_V(Len_w,i+1);

    for(g=0;g<=i;g++){
       if(Len_w[g] == Maximum){
           sscanf(Ind_w[g],"%s",out);
           printf("\n%s",out);
       }
    }
    return 0;
}
/*----------------------------------------------------------------------------*/
int Max_V(int vf[], int len)
{
    int j; int Max=0;
    Max=vf[0];
    for(j=0;j<len;j++)
    {
        if(vf[j]>Max)
        {
            Max=vf[j];
        }
    }
    return Max;
}
/*----------------------------------------------------------------------------*/
4

1 に答える 1

3
p=s;

while(sscanf(p,"%s%n",w,&k)==1){
    Len_w[i] = strlen(w);
    Ind_w[i] = p;
    p+=k;
    i++;
}

sscanfがスキャンした単語を書き込む開始位置へのポインターは、呼び出しごとに変わります。そのため、単語は に次々に格納されw、単語の開始位置 (配列内s) は に格納されInd_wます。

収納すれば

Ind_w[i] = w;

の最初のアドレスと常に同じアドレスを保存charwます。

于 2013-01-03T22:46:26.777 に答える