C代码中没有重复

时间:2013-01-03 22:38:42

标签: c

我想知道为什么这个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;
}
/*----------------------------------------------------------------------------*/

1 个答案:

答案 0 :(得分: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的地址相同。