gpt4 book ai didi

c - C代码中的字符串指针问题

转载 作者:太空宇宙 更新时间:2023-11-04 05:28:39 25 4
gpt4 key购买 nike

此 C 程序从键盘读取一行文本,然后写入该行中最长的单词。我下面的代码的问题是它只打印除了长度之外的最后一个单词,尽管一切看起来都很好。任何人都可以看到我的代码有问题吗?

#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;
printf("\nInsert the line....\n");
p=fgets(s, MAX, stdin);

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

for(g=0;g<i;g++){
if(Len_w[g] == Maximum){
//sscanf(Ind_w[g],"%s",out);
printf("\n%s", Ind_w[g]);


}
}

return 0;
}

/*----------------------------------------------------------------------------*/
int Max_V(int vf[], int len)
{
int j; int Max;
Max=*vf;

for(j=1; j < len; j++)
{
if(*(vf+j) > Max)
{
Max=*(vf + j);
}
}

return Max;
}
/*----------------------------------------------------------------------------*/

最佳答案

Ind_w[i] = w;//the issue is here!!

您让 Ind_w 中的所有指针都指向同一个缓冲区,每个输入的单词都会覆盖该缓冲区。因此只有最后输入的单词保持“可见”。

如果你有,

Ind_w[i] = strdup(w);

是一个简单的解决方案。否则

Ind_w[i] = malloc(strlen(w)+1);
strcpy(Ind_w[i], w);

这两种方式都需要在不再使用时释放指向的内存。

关于c - C代码中的字符串指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14142447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com