示例:
char str[10];
gets(str);
str = (char[10]) strtok(str, " "); // type error here
由于strtok()
会返回char *
,因此我会在没有该转换的情况下收到类型错误。有了它,我得到以下内容:
error: cast specifies array type
修复此代码的最佳方法是什么?
答案 0 :(得分:2)
您应该将strtok的结果分配给单独的char *变量。你不能将它分配回str。
答案 1 :(得分:2)
您不应该首先将strtok()
的结果分配回str
变量。请改用单独的变量,例如:
char str[10];
gets(str);
char *token = strtok(str, " ");
//use token as needed...
答案 2 :(得分:2)
哦,伙计,小心gets()
! Related question
您不能分配给数组(换句话说,将它们用作左值)。
char *p = "string";
char array[10];
array = p; /* invalid */
除此之外,您没有正确使用strtok()
。返回的指针指向后续标记,因此您可能希望创建一个单独的char指针来存储它。
答案 3 :(得分:1)
您无法为数组指定任何内容。即使这个简单的程序也会失败:
char *foo(void) { }
int main(int argc, char *argv[])
{
char a[1];
a = foo();
return 0;
}
确实如此:
$ make fail
cc fail.c -o fail
fail.c: In function ‘main’:
fail.c:7:4: error: incompatible types when assigning to type ‘char[1]’ from type ‘char *’
make: *** [fail] Error 1
将str
重新定义为char *str
或者找出一些其他方法来重新编写程序以不尝试分配给数组。 (周围的代码是什么样的?你粘贴的代码无论如何都没有意义......)
答案 4 :(得分:0)
您可以在调用函数前获取参数:
char mystr[] = "192.168.0.2";
split_ip(myster[]);
char * split_ip( char ip_address[]){
unsigned short counter = 0;
char *token;
token = strtok (ip_address,".");
while (token != '\0')
{
printf("%s\n",token);
token = strtok ('\0', ".");
}
}// end of function def