【问题标题】:casting char * to char[]将 char * 转换为 char[]
【发布时间】:2012-01-15 12:41:00
【问题描述】:

例子:

char str[10];

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

由于strtok() 返回一个char *,我得到一个类型错误,没有那个转换。有了它,我得到以下信息:

error: cast specifies array type

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

【问题讨论】:

  • char* ptr = strtok(str," ");

标签: c casting char


【解决方案1】:

你可以在调用你的函数之前获取参数:

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

【讨论】:

    【解决方案2】:

    哦,伙计,小心那个gets()Related question


    您不能分配给数组(换句话说,将它们用作左值)。

    char *p = "string";
    char array[10];
    array = p; /* invalid */
    

    除此之外,您没有正确使用strtok()。返回的指针指向后续标记,因此您可能需要创建一个单独的 char 指针来存储它。

    【讨论】:

      【解决方案3】:

      您不能将任何内容分配给数组。即使是这个简单的程序也会失败:

      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】:

        首先,您不应该将strtok() 的结果分配回您的str 变量。请改用单独的变量,例如:

        char str[10]; 
        gets(str); 
        char *token = strtok(str, " ");
        //use token as needed...
        

        【讨论】:

          【解决方案5】:

          您应该将 strtok 的结果分配给单独的 char* 变量。您不能将其分配回 str。

          【讨论】:

            猜你喜欢
            • 2010-10-12
            • 2021-04-29
            • 2013-10-18
            • 2020-11-25
            • 1970-01-01
            • 1970-01-01
            • 2011-06-08
            • 2012-07-01
            • 2011-10-19
            相关资源
            最近更新 更多