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

C 为什么会出现此错误:指向整数转换的指针不兼容?,c,pointers,C,Pointers,请看一下代码,clang给我的错误是“不兼容的指针到整数转换”,为什么会发生这种情况 #include <stdio.h> #include <stdlib.h> int main (void) { char* name; name = malloc (sizeof(char) * 6); *name = "david"; return 0; } #包括 #包括 内部主(空) { 字符*名称; 名称=malloc(sizeof(char)

请看一下代码,clang给我的错误是“不兼容的指针到整数转换”,为什么会发生这种情况

#include <stdio.h>
#include <stdlib.h>
int main (void)
{
    char* name;
    name = malloc (sizeof(char) * 6);
    *name = "david";
    return 0;
}
#包括
#包括
内部主(空)
{
字符*名称;
名称=malloc(sizeof(char)*6);
*name=“大卫”;
返回0;
}

无论发生什么,这一行都会发生:

*name = "david";
*name
的类型将是
char
,因为您正在取消引用
name
指向的
char
“david”
的类型是
char[6]
,因为它是一个6个字符的字符串文字(5+空终止符)。数组类型衰减为指针,
char
是整数类型;您的作业试图设置指向整数的指针,因此
指向整数转换的指针不兼容


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

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

*name = "david"; 
只能使用
memcpy()
(内置函数)复制字符串。若要解决此问题,请替换该行

*name=“david”带有
memcpy(名称,“david”,sizeof(“david”)

看这里名称不是指向字符的指针
通过使用库函数malloc,您将其设置为字符数组
因此,您不能像指针一样简单地将其指向任何地址
您必须使用库函数strcpy(p,“david”) 那么只有它才能给您提供所需的结果

这一行:

*name = "david";
应该读

name = "david";

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

如果名称将包含一些非零的内容,则应在大小上添加+1:memcpy(name,“david”,sizeof(“david”)+1);函数的作用是:返回字符串的大小以及终止的空字符strlen()不会计算字符串末尾出现的空字符。因此,sizeof(“david”)后面的加号不是必需的。哦,是的,你是对的。我最后一次用C编写代码已经很多年了,现在我已经忘记了它的基本原理。很抱歉