我是新的 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/