该计划如下
typedef struct Signal {
long int vr[4];
char name[4];
char Type;
char casuality[2];
};
我希望以这样的方式使用这个结构:例如:for for 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//
}
答案 0 :(得分:3)
在您的情况下,"output"
是字符串文字,其类型为char [7]
,而casuality[0]
的类型为char
。
显然,它们不兼容(一个是数组,另一个是简单的char
),因而错误。
有两种方法可以实现你想要的东西,
将char casuality[2];
更改为char *casuality[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
所跨越的内存,您也需要strcpy
或memcpy
这样的函数来分配这个记忆的价值。
特别是,以下内容可行:
strcpy(iname.name, "abc")
(请注意,字符串文字由编译器终止,strcpy
包含\0
)
为了让你(希望)更清楚,以下几点是相同的:
iname.name[0] = 'a'
iname.name[1] = 'b'
iname.name[2] = 'c'
iname.name[3] = '\0'