字符数组错误,预期表达式,错误

时间:2016-06-29 07:02:56

标签: c pointers

我有以下代码,我想将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'};
}

2 个答案:

答案 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));

这将分配一个缓冲区,该缓冲区完全用零填充,即不需要进一步初始化字符数组。