-4

我想知道为什么这个 C 代码可以在没有任何重复的情况下工作,p因为它也会更新,但是如果我w输入ind_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;

您始终存储相同的地址,即char.w

于 2013-01-03T22:46:26.777 回答