gpt4 book ai didi

c - 从函数返回指针数组

转载 作者:太空狗 更新时间:2023-10-29 16:10:23 31 4
gpt4 key购买 nike

我正在尝试使用函数打印给定字符串中每个字符的整数值。当我将一个字符串传递给此函数时,它将给定字符串中的每个字符转换为一个整数,然后将其保存到一个结果数组中。我还创建了一个指针数组,用于保存每个字符对应整数的地址。但是当我返回这个指针数组时,我无法正确打印所有整数值。

#include <stdio.h>
int *c2i(char *str);

int main(){

char s[20];
int *p, i;
printf("Enter your string:\n");
scanf("%s", s);
p=c2i(s);
for(i=0; i<4; i++){
printf("\n%d\t%d\n", *p, p);
p++;
}

return 0;
}

int *c2i(char *str){

int i=0, result[20], *ptr[20];

while(*(str+i)!='\0'){
result[i]=*(str+i) & 0xff;
ptr[i]=&result[i];
i++;
}
printf("%d %d %d %d %d %d %d %d", *ptr[0], *ptr[1], *ptr[2], *ptr[3], ptr[0], ptr[1], ptr[2], ptr[3]);

return *ptr;
}

为了调试目的,我包含了许多 printf 语句。当我尝试运行上面的代码时程序的输出是:

Enter your string:

abcd

97 98 99 100 6356588 6356592 6356596 6356600

97 6356588

1999382056 6356592

20 6356596

1 6356600

当我在 main() 函数中打印第一个值时,我只能正确获取它。当我增加指针并尝试打印下一个值时,我得到了垃圾结果。我可以看到地址相同,但值已损坏。我在这里做错了什么?

最佳答案

您不能返回堆栈分配的数组,因为一旦函数调用完成,它就不再被标记为正在使用。相反,您应该 malloc 数组,例如 int *ptr = malloc(sizeof(int)*20);。还记得在使用完数组后 free 数组(这是一个好习惯)。有关详细信息,请参阅这些帖子

Returning an array using C

returning a local variable from function in C

关于c - 从函数返回指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47057809/

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