gpt4 book ai didi

c - 在指向 char 的指针数组中输入单词时出错

转载 作者:行者123 更新时间:2023-11-30 16:27:14 25 4
gpt4 key购买 nike

该程序检查指向 char **s 的指针数组中的单词(您应该首先加载)是否与函数 fun 中的单词相同。由于某种原因,我无法在 main 函数中正确加载单词,而且我不知道原因在哪里。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int fun(char **s,int j)
{
int i, num=0;

for(i=0;i<j;i++)
{
if(strcmp(s[i],"first")==0)
num++;
if(strcmp(s[i],"second")==0)
num++;

}

if(num==j)
return 1;
else
return 0;

}
int main(int argc,char *argv[])
{
char **s=(char**)malloc(20*sizeof(char*)); // alloc
char ss[20];
int i=0,ret;

while(1) // while string 'ss' is different from string "stop"
{
scanf("%s",ss);

if(strcmp(ss,"stop")==0)
break;
else
{ s[i]=ss; // if ss is different from "stop"
i++;

}

}

ret=fun(s,i); // returns 1 if words are the same as words in function fun

if(ret)
printf("Matching\n");

else
printf("Doesn't matches\n");

for(int t=0;t<i;t++)
free(s[i]);
free(s);

}

最佳答案

char **s=(char**)malloc(20*sizeof(char*)); // alloc

这为 20 个指向 char 的指针腾出了空间。它没有腾出任何空间来实际存储 char

s[i]=ss; // if ss is different from "stop"

在循环中执行此操作只会产生一堆指向相同底层 char 序列的指针。您需要使用循环或类似 strncpy 的函数实际复制char

for(int t=0;t<i;t++)
free(s[i]);

这应该是一个明显的错误迹象,因为没有与此 free 对应的 malloc。 (您唯一的 malloc 与下面的 free(s); 相对应。)

关于c - 在指向 char 的指针数组中输入单词时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52807496/

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