gpt4 book ai didi

char *str[ ] 通过引用传递不起作用

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

我在帮助函数中传递一个 char *str[] ,然后向其中添加内容,但在主函数中其值保持不变。

从 main 中,我调用 letterCombinations 函数,它调用帮助函数在帮助中,我正在编辑 char * str[] wwhihc 的值,该值已更改,但未反射(reflect)在字母组合函数中

请帮我看看为什么它不起作用

help(char *str[],char* curr,int index,char* digits,char** a,int *k)
{
if(strlen(curr)==strlen(digits))
{
printf("%d",*k);
str[*k]=(char*)malloc(strlen(digits)+1);
str[*k]=curr;
printf("%s %s %d\n",curr,str[*k],*k);

*k=*k+1;

return ;
}

int i;

char* loop=a[digits[index]-'0'];

int l=strlen(loop);
for(i=0;i<l;i++)
{
curr[index]=loop[i];

help(str,curr,index+1,digits,a,k);
curr[index]='\0';
}
}
char** letterCombinations(char* digits, int* returnSize) {
char *str[100];
int i=0;
char* curr=malloc(sizeof(strlen(digits)+1));
char** a=(char**)malloc(10*sizeof(char*));
int siz=0;
a[0]="";
a[1]="";
a[2]="abc";
a[3]="def";
a[4]="ghi";
a[5]="jkl";
a[6]="mno";
a[7]="pqrs";
a[8]="tuv";
a[9]="wxyz";

help(str, curr, 0, digits,a,&siz);

printf(" %d",siz);
for(i=0;i<siz;i++)
{
printf(" s %s",str[i]);
}
// *returnSize=siz;
return str;




}

最佳答案

如果您编译代码,您应该会看到如下警告:

warning C4172: returning address of local variable or temporary
warning C4100: 'returnSize' : unreferenced formal parameter

局部变量或临时变量的返回地址是解释您行为的警告。

在您的代码中:

char** letterCombinations(char* digits, int* returnSize) {
char *str[100];
...
return str;
}

您在堆栈上创建一个数组 str。当您从 letterCombinations 返回时,变量超出范围,并且堆栈内存位置被清理。即str使用的内存地址不再有效。

您可以进行更改,以便调用者传入自己的 char* 变量,这将解决此问题。或者,您可以 malloc str,然后当您从函数返回时,内存位置仍然存在。但调用者必须释放内存位置 - 这很困惑。

修复该问题后...然后继续处理下一个错误。

我注意到的下一件事是在帮助功能中:

if (strlen(curr) == strlen(digits))

但 curr 未初始化。接下来解决这个问题。然后继续处理下一个错误。

您应该逐步浏览每一行,思考如何在每一行中填充变量。

关于char *str[ ] 通过引用传递不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45784576/

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