请看一下代码,clang 给我错误“不兼容的整数转换指针”,为什么会这样?
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
char* name;
name = malloc (sizeof(char) * 6);
*name = "david";
return 0;
}
无论发生什么都发生在这一行:
*name = "david";
的类型*name
将是char
,因为您正在取消引用char
指向的 by name
。的类型"david"
是char[6]
,因为它是 6 个字符(5 + 空终止符)的字符串文字。数组类型衰减为指针,achar
是整数类型;您的分配尝试设置一个指向整数的指针,因此incompatible pointer to integer conversion
.
即使赋值的左边有正确的类型,你也不能只用赋值运算符复制数组。如果你想设置name
为"david"
,那么你应该使用strcpy( name, "david" )
.
在 C 编程中,您永远不能直接将字符串复制/分配到指针中,例如
*name = "david";
您只能使用memcpy()
(内置函数)复制字符串。要解决此问题,请将行替换
*name = "david";
为memcpy(name,"david",sizeof("david"));
这一行:
*name = "david";
应该读
name = "david";
*name 与 name[0] 同义(在此上下文中)(即 name 变量指向的字符串的第一个字符)。您希望将 name 变量而不是指针的内容分配为指向字符串文字“david”所指向的同一事物。
看这里 name 不是指向字符的指针,
通过使用库函数 malloc 你已经把它变成了一个字符数组,
所以你不能像指针一样简单地将它指向任何地址
你必须使用库函数strcpy(p,"david")
然后只有它会给你想要的结果