'const char *'类型的变量不能分配给'char'类型的实体

时间:2015-07-31 11:35:58

标签: c arrays string variables pointers

该计划如下

typedef struct Signal {
  long int vr[4];
  char name[4];
  char Type;
  char casuality[2];
};

我希望以这样的方式使用这个结构:例如:for for vr我可以vr[0]=1073741824casuality如果我指定casuality[0]="output"它显示上面给出的错误

 void xmlRead()
 {
    struct FMU *fmu;
    struct Signal *var;
    struct Signal iname;
    (*var).vr[0]=1073741824;
    (*var).vr[1]=1073741825;
    (*var).vr[2]=1073741826;
    (*var).vr[3]=1073741827;
    (iname).name[0]="Ball1_pos";   //Here it is showing the error//
} 

2 个答案:

答案 0 :(得分:3)

在您的情况下,"output"字符串文字,其类型为char [7],而casuality[0]的类型为char

显然,它们不兼容(一个是数组,另一个是简单的char),因而错误。

有两种方法可以实现你想要的东西,

  1. char casuality[2];更改为char *casuality[2];,然后分配工作正常(但是,您无法修改字符串文字)。

  2. 将数组分配并使用strcpy() 字符串文字的内容复制到数组中。

答案 1 :(得分:0)

您正尝试将字符串文字(由多个char s)分配到四个字符数组的第一个位置(Signal.name[0])。

// a single char = a string literal, i.e., from const char* to char
(iname).name[0] = "Ball1_pos";

这显然在类型上不兼容。

请注意,即使字符串文字足够短以适应变量name所跨越的内存,您也需要strcpymemcpy这样的函数来分配这个记忆的价值。

特别是,以下内容可行:

strcpy(iname.name, "abc")

(请注意,字符串文字由编译器终止,strcpy包含\0

为了让你(希望)更清楚,以下几点是相同的:

iname.name[0] = 'a'
iname.name[1] = 'b'
iname.name[2] = 'c'
iname.name[3] = '\0'