【问题标题】:variable of type 'const char *' cannot be assigned to entity of type 'char'“const char *”类型的变量不能分配给“char”类型的实体
【发布时间】:2015-07-31 11:35:57
【问题描述】:

程序如下

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

我想以这种方式使用这个结构,例如:对于变量vr,我可以做vr[0]=1073741824,但对于casuality,如果我分配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//
} 

【问题讨论】:

  • 错误信息是什么?
  • 您的错误消息缺少* .. 这些星星很重要。我已经编辑了
  • 您是否打算在取消引用之前为 *var 实际分配存储空间?

标签: c arrays string variables pointers


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 因为我在这里使用的结构可能是可能的解决方案
【解决方案2】:

您正在尝试将字符串文字(由多个 chars 组成)分配给四个字符数组 (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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 2018-07-23
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多