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

daN*_*Set 5 c pointers

请看一下代码,clang给我的错误是"不兼容的整数转换指针",为什么会发生?

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

K-b*_*llo 12

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

*name = "david";
Run Code Online (Sandbox Code Playgroud)

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

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


Kee*_*ath 8

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

*name = "david"; 
Run Code Online (Sandbox Code Playgroud)

您可以只复制使用字符串memcpy()(内置功能).为了解决这个问题替换行
*name = "david";memcpy(name,"david",sizeof("david"));

  • sizeof()函数返回字符串的大小以及终止空字符strlen()将不计算将出现在字符串末尾的NULL字符.因此,不需要sizeof("david")之后的加号字符. (2认同)