12

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

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

4 回答 4

18

无论发生什么都发生在这一行:

*name = "david";

的类型*name将是char,因为您正在取消引用char指向的 by name。的类型"david"char[6],因为它是 6 个字符(5 + 空终止符)的字符串文字。数组类型衰减为指针,achar整数类型;您的分配尝试设置一个指向整数的指针,因此incompatible pointer to integer conversion.

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

于 2012-12-26T06:47:19.723 回答
10

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

*name = "david"; 

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

于 2012-12-26T07:09:23.257 回答
3

这一行:

*name = "david";

应该读

name = "david";

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

于 2012-12-27T20:32:32.533 回答
0

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

于 2012-12-26T08:27:43.843 回答