как использовать memset для двумерного массива?

У меня Двойной диммер. множество:

 alarm_1_active_buffer[MAX_NUM_ALARMS][MAX_ALARM_STRING_SIZE];

Я хочу очистить буфер перед его заполнением.
Вот так:

 for(index=0; index<MAX_NUM_ALARMS ; index++)
    {
        memset(&alarm_1_active_buffer[index], 0, MAX_ALARM_STRING_SIZE);
        memset(&alarm_1_active_buffer[index],string, MAX_ALARM_STRING_SIZE);
    }

Это не работает.


person mujahid    schedule 23.02.2011    source источник


Ответы (2)


Поскольку массивы располагаются в непрерывных адресных пространствах, вам не нужно делать ничего особенного для двумерных массивов. Вы можете просто использовать memset(alarm_1_active_buffer, 0, MAX_NUM_ALARMS * MAX_ALARM_STRING_SIZE * sizeof(type of alarm_1_active_buffer));.

person Asha    schedule 23.02.2011
comment
Ммм..alarm_1_active_buffer[index] = 0 - person Asha; 23.02.2011
comment
Вы можете сразу очистить весь массив — вам не нужно перебирать внешний массив и очищать каждый индекс. - person Conrad Meyer; 23.02.2011
comment
Совет. При использовании оператора sizeof обращайтесь к самой переменной, при необходимости разыменовывая ее, вместо явного указания типа (например, sizeof **alarm_1_active_buffer вместо sizeof (char)). Это предотвращает ошибки, возникающие при изменении типа переменной, когда один из экземпляров sizeof, ссылающихся на старый тип, не изменяется вместе с ним. - person Blrfl; 23.02.2011

Сначала убедитесь, что #include <string.h>:

memset(alarm_1_active_buffer, 0, sizeof(alarm_1_active_buffer));

Этот метод работает независимо от типа элементов в массиве.

person Conrad Meyer    schedule 23.02.2011