为什么会出现此错误:指向整数转换的指针不兼容?

时间:2012-12-26 06:44:32

标签: c pointers

请看一下代码,clang给我的错误是“指向整数转换的指针不兼容”,为什么会这样?

#include <stdio.h>
#include <stdlib.h>
int main (void)
{
    char* name;
    name = malloc (sizeof(char) * 6);
    *name = "david";
    return 0;
}

4 个答案:

答案 0 :(得分:11)

无论发生什么事都发生在这条线上:

*name = "david";

*name的类型为char,因为您取消引用char指向的name"david"的类型为char[6],因为它是6个字符的字符串文字(5 + null终结符)。数组类型衰减为指针,char整数类型;你的赋值试图设置一个指向整数的指针,因此incompatible pointer to integer conversion

即使赋值的左侧具有正确的类型,也不能只使用赋值运算符复制数组。如果您想将name设置为"david",那么您应该使用strcpy( name, "david" )

答案 1 :(得分:6)

在C编程中,您永远不能将字符串直接复制/分配到指针

*name = "david"; 

您只能使用memcpy()复制字符串(在内置功能中)。要解决问题,请更换线路
 *name = "david";memcpy(name,"david",sizeof("david"));

。{

答案 2 :(得分:2)

这一行:

*name = "david";

应该阅读

name = "david";

* name是名称[0]的同义词(在此上下文中)(即name变量指向的字符串的第一个字符)。您希望将name变量(而不是指针的内容)指定为指向字符串文字“david”所指向的相同内容。

答案 3 :(得分:0)

看这里名字不是指向字符的指针 通过使用库函数malloc,你已经使它成为一个字符数组
所以你不能简单地将它指向任何地址,如指针
你必须使用库函数 strcpy(p,“david”) 然后只有它会给你想要的结果