c - 将返回的指针分配给一个新数组

标签 c arrays pointers

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

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);
}

最佳答案

您正在尝试将一个 char 分配给此处的 char 指针:

*(tokenArr+i)=*token;

token 是一个指针,所以分配给它,而不是它指向的值。

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

char** tokenArray;
tokenArray=parseLine(str);  

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

在解决此问题时,请考虑检查您调用的函数的返回值是否存在无效值。然后您将如何知道您实际处理了多少元素以及您将如何获取该信息。

关于c - 将返回的指针分配给一个新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31348149/

相关文章:

c - 内存分配释放

C++:在不知道函数名的情况下获取当前函数指针?

将字符串与自身连接两次会产生段错误

c - 没有 PThread 的同步

c - 将局部变量初始化为数据段字符串

javascript - 按特定的给定顺序对 JSON 数组进行排序

c - receivefrom:资源暂时不可用。为什么?

javascript - 向数组添加多个输入字段的问题

java - 为什么在用int添加字符串的同时还要添加空字符串?

c++ - 通过基类指针获取子类类型