将char *转换为char []

时间:2011-12-08 01:01:38

标签: c casting char

示例:

char str[10];

gets(str);
str = (char[10]) strtok(str, " "); // type error here

由于strtok()会返回char *,因此我会在没有该转换的情况下收到类型错误。有了它,我得到以下内容:

error: cast specifies array type

修复此代码的最佳方法是什么?

5 个答案:

答案 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