将返回的指针分配给新数组

时间:2015-07-10 18:46:33

标签: c arrays pointers

我是新的程序员。我定义了一个函数,它解析一行并生成令牌。这些令牌中的每一个都将保存在一个令牌数组中。所以我为此创建了一个字符串数组。我定义的函数返回此数组。现在我想将返回的数组分配给一个新数组我得到一个错误:

incompatible types when assigning to type ‘char *[5]’ from type ‘char **’. 

所以我不知道如何处理这个问题。这是整个代码;

#include <string.h>
#include <stdio.h>

char **  parseLine(char * str){
    char del[2]=",";
    char * token;
    //Array of strings
    char * tokenArr[5];
    token=strtok(str,del);
    int i=0;    
    while(token!=NULL && i<5){
        //save each new token in the array of tokens
        *(tokenArr+i)=*token;
        token=strtok(NULL,del);
         i++;
    }
    return tokenArr;
}

int main(int argc, char * argv []){
    char str[120]="Achon, Adkins, 3459345,cs,usa";
    char * tokenArray [5];
    tokenArray=parseLine(str);
}

2 个答案:

答案 0 :(得分:3)

您正在尝试将char指向char指针:

*(tokenArr+i)=*token;

token是一个指针,因此请指定它,而不是它指向的值。

在函数中,您尝试返回本地数组tokenArr。返回数组和/或返回局部变量是不可能的。返回指向堆上分配的数组的指针:

char** tokenArray;
tokenArray=parseLine(str);  
char** parseLine(char* str){
...
char** tokenArr = malloc(sizeof(*tokenArr)*5);
...
return tokenArr ;
}

在解决此问题时,请考虑检查所调用函数的返回值,以获取无效值。然后你怎么知道你实际处理了多少元素以及如何获得这些信息。

答案 1 :(得分:0)

在C语言中,不可能&#34;返回&#34;函数中数组类型的值。不能&#34;分配&#34;或以任何其他方式使用核心语言功能复制数组。

在您的情况下,通常的做法是将目标数组作为参数传递给函数,并将其填入函数内部。函数的返回值可用于将实际令牌数返回给用户

unsigned parseLine(char * str, char *tokens[], unsigned max_tokens)
{
  char del[2] = " ,";

  char *token = strtok(str, del);
  unsigned i = 0;    

  while (token != NULL && i < max_tokens){
    tokens[i++] = token;
    token = strtok(NULL, del);
  }

  return i;
}

您将把您的功能称为

int main(int argc, char *argv[])
{
  char str[120] = "Achon, Adkins, 3459345,cs,usa";

  char *tokenArray[5];
  unsigned n_tokens = parseLine(str, tokenArray, 5);

  for (unsigned i = 0; i < n_tokens; ++i)
    printf("%s\n", tokenArray[i]);
}