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