我有以下代码,我想将char数组初始化为NULL。
收到以下错误
错误: 期待一个表达 g_device-> name1 [NAME_LENGTH-1] = {' \ 0'};
typedef struct device_ {
uint32_t id;
char name1[NAME_LENGTH];
char name2[NAME_LENGTH];
} device_t;
device_t *g_device = NULL;
void init_device(void)
{
g_device = malloc(sizeof(device_t));
g_device->id = 0;
g_device->name1[NAME_LENGTH-1] = {'\0'};
g_device->name2[NAME_LENGTH-1] = {'\0'};
}
答案 0 :(得分:3)
您无法在C中分配数组,而且无论如何都不匹配,g_device->name1[NAME_LENGTH-1]
是char
而{'\0'}
是char[1]
。
使用strcpy:
strcpy( g_device->name1 , "" );
或手动终止数组:
g_device->name1[0] = '\0';
请注意,您应该将第一个字符设置为0,而不是最后一个字符。
以上两个示例当然会将其他元素保留为未初始化,因此如果您想将它们初始化为0,请使用memset或循环:
memset( g_device->name , '\0' , NAME_LENGTH * sizeof( char ) );
或:
for( size_t index = 0 ; index < NAME_LENGTH * sizeof( *g_device->name ) ; index++ )
{
g_device->name[index] = '\0';
}
答案 1 :(得分:0)
您也可以使用calloc分配缓冲区,即
g_device = calloc(1, sizeof(device_t));
这将分配一个缓冲区,该缓冲区完全用零填充,即不需要进一步初始化字符数组。