请看一下代码,clang给我的错误是“指向整数转换的指针不兼容”,为什么会这样?
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
char* name;
name = malloc (sizeof(char) * 6);
*name = "david";
return 0;
}
答案 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”)
然后只有它会给你想要的结果