gpt4 book ai didi

c - 返回 char* 以在 C 中打印

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

所以我试图在从函数返回后打印出一个 char* 数组,但我一直遇到段错误。

char* return(node *n){
node* p = list->head;
int count = 0;
int size = 0;

while(p != NULL){
size += strlen(p->name);
count++;
p = p->nxt;
}

size = size + 1; // for the '\0'

char * arr[count][size];
p = list->head;
count = 0;

while(p != NULL){
strcpy(arr[count], p->name);
count++;
p = p->next;

}
return arr;
}

然后我去尝试在某个节点上用我的主要方法打印出来。我遇到了段错误。

char* test = return(node1);
for(i = 0; i < 5; i++){
printf("%s", test[i]);
}

最佳答案

您的 arr 是(不幸的是命名的)函数的本地。当函数退出时,空间被释放。如果您之后使用该指针,您将索引到未知的地方,而且很可能是在您不应该去的地方(这会导致段错误)。

当你想在一个函数中分配空间并返回一个指针时,你应该使用malloc(或等效的),并记住之后释放空间。另一种方法是让指针成为函数的参数,并将分配(和释放)的责任留给调用者(就像 fgets 那样)。

方法 1(函数内部分配):

char *foo() {
char *arr = malloc(100);
return arr;
}

/* somewhere else */
char *arr = foo();
/* use arr */
free(arr);

方法 2(函数外分配):

void foo(char *arr, size_t size) {
/* do stuff to arr */
}

/* somewhere else */
char *arr = char[100];
foo(arr, 100);

编辑:错了。忽略这里的内容。

关于c - 返回 char* 以在 C 中打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27163187/

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