C 将字符串文字指定给数组时出错
我对结构的定义如下:C 将字符串文字指定给数组时出错,c,string,pointers,C,String,Pointers,我对结构的定义如下: typedef PACKED struct { UINT8 pedo_config[5]; // 0: male 1: Non 2:weight 3:stepLen 4:height INT8 local_name[LOCAL_NAME_LEN_MAX]; } HOSTINFO; HOSTINFO hello_sensor_hostinfo; 但是警告 警告:赋值从指针生成整数而不使用强制转换[默认情况下启用] 发生在hello\u senso
typedef PACKED struct
{
UINT8 pedo_config[5]; // 0: male 1: Non 2:weight 3:stepLen 4:height
INT8 local_name[LOCAL_NAME_LEN_MAX];
} HOSTINFO;
HOSTINFO hello_sensor_hostinfo;
但是警告
警告:赋值从指针生成整数而不使用强制转换[默认情况下启用]
发生在hello\u sensor\u hostinfo.local\u name[0]=“AAA”代码>
我还尝试更改INT8 local_name[local_name_LEN_MAX]代码>到字符本地名称[本地名称\u LEN\u MAX]代码>
但警告仍然存在
我错过什么了吗?为什么会出现警告?您没有在C
中分配字符串
您需要使用将字符串lieral复制到数组中
此外,如果选中,则hello\u sensor\u hostinfo.local\u name[0]
的数据类型为INT8
,而“AAA”
表示字符*
(字符串文字的基地址)。因此不匹配
FWIW,在您的例子中,INT8 local_name[local_name_LEN_MAX]
是一个编译时数组。通过使用赋值运算符=
,您基本上是在尝试更改数组的基址,这是不允许的。您可以将local\u name
定义为指针,然后可以为其分配字符串文字。差不多
typedef PACKED struct
{
UINT8 pedo_config[5]; // 0: male 1: Non 2:weight 3:stepLen 4:height
INT8 * local_name;
} HOSTINFO;
HOSTINFO hello_sensor_hostinfo;
hello_sensor_hostinfo.local_name="AAA";
你有那个警告的电话号码吗?如果是这样的话,它是这些行中的一行吗?数组在C中是不可赋值的。您需要一个字符一个字符地复制它。幸运的是,有一个名为strcpy
的函数可以为您执行此操作。@Martin不客气。:-)