返回char *以C语言打印

时间:2014-11-27 04:41:13

标签: c arrays string char ll

所以我试图在从函数返回后打印出一个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;
}

然后我尝试在某个节点上的main方法中将其打印出来。我得到了一个分段错误。

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

1 个答案:

答案 0 :(得分:3)

您的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);
编辑:错了。忽略这里的内容。