我想知道为什么这个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;
}
/*----------------------------------------------------------------------------*/
答案 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
的地址相同。