【问题标题】:how to use memset for double dimentional array?如何将 memset 用于二维数组?
【发布时间】:2011-02-23 09:29:08
【问题描述】:

我有一个双暗。数组:

 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);
    }

它不工作。

【问题讨论】:

    标签: c arrays multidimensional-array memset


    【解决方案1】:

    由于数组放置在连续的地址空间中,因此您不必为二维数组做任何特别的事情。你可以简单地使用memset(alarm_1_active_buffer, 0, MAX_NUM_ALARMS * MAX_ALARM_STRING_SIZE * sizeof(type of alarm_1_active_buffer));

    【讨论】:

    • 嗯..alarm_1_active_buffer[index] = 0
    • 您可以一次清除整个数组——您不需要遍历外部数组并清除每个索引。
    • 提示:当使用 sizeof 运算符时,引用变量本身,如果需要取消引用,而不是显式命名类型(例如,sizeof **alarm_1_active_buffer 而不是 sizeof (char))。这可以防止当变量的类型更改并且引用旧类型的 sizeof 实例之一没有随之更改时出现的错误。
    【解决方案2】:

    确保首先#include &lt;string.h&gt;

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

    无论数组中元素的类型如何,此方法都有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-05
      • 2017-03-26
      • 1970-01-01
      • 2016-07-30
      相关资源
      最近更新 更多