返回字符*以在 C 中打印



所以我试图在从函数返回后打印出一个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 ''
    char *arr[count][size];
    p = list->head;
    count = 0;
    while (p != NULL) {
        strcpy(arr[count], p->name);
        count++;
        p = p->next;
   }
   return arr;
}

然后,我尝试在某个节点上的main函数中打印出来。 我得到了一个分段错误。

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

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

当你想在函数中分配空间并返回指针时,你应该使用 malloc(或等效项),并记得在之后free空格。另一种方法是让指针成为函数的参数,并将分配(和解除分配)的响应留给调用方(就像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);

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

相关内容

  • 没有找到相关文章

最新更新