【问题标题】:Find number of records in an array of structures查找结构数组中的记录数
【发布时间】:2018-05-02 08:17:03
【问题描述】:

假设我们有一个最多包含 50 个元素的结构体数组,这些元素将从缓冲区写入函数依次添加。如果未达到最大项目数,如何找到当前在数组中录制的数量?

typedef struct
{
    remoteInstructionReceived_t instruction;
    uint16_t parameter;
} instructionData_type;

remoteInstructionReceived_t commandBuffer[50];

【问题讨论】:

  • 使用变量来跟踪它?
  • @FelixPalmen 我就是这样做的,已经。是最合理的解决方案。

标签: c arrays data-structures struct


【解决方案1】:

C 数组是固定大小的:数组中总是正好有 50 个对象。如果您的程序逻辑要求其中一些是“非活动的”(例如尚未编写),您必须单独跟踪此类信息。例如,您可以使用size_t 变量来存储数组中“有效”条目的数量。

另一种方法是将值 remoteInstructionReceived_t 指定为终止符,类似于将 0 用作 NUL 终止字符串的终止符。然后,您不必单独跟踪数组的“有用长度”,但必须确保终止符始终跟在其中的最后一个有效项之后。

一般而言,长度跟踪可能更有效且更易于维护。出于完整性考虑,我仅提及第二个(终结者)选项。

【讨论】:

  • 所以对于数组结构我不能使用任何类似 strlen() 的函数?
  • @P47R1ck strlen 适用于以 NUL 结尾的字符串。这是一个字符缓冲区,其最后一个元素是0。如果您有一个带有随机内容的char x[10]strlen 也无法处理它。如果您为您的数组引入类似的约定(例如终止符具有parameter == 0parameter == ~0u),您可以构建一个等效于strlen 的函数。我会将其添加到答案中。
【解决方案2】:

你不能,C 没有办法知道变量是否“有值”。所有的价值都是价值,没有任何价值比其他任何价值都更真实。

答案是需要额外的状态,即某种形式的计数器变量来保存这些信息。通常你在插入新记录时使用它来知道下一条记录应该去哪里。

【讨论】:

  • 好的,谢谢。我想我仍然坚持使用计数器变量的想法
【解决方案3】:

您是否考虑过使用不同的数据结构?例如,您可以包装您的结构以允许创建链接列表。仅通过释放内存,删除将是真实的。此外,对于某些类型的操作,例如在列表中间添加元素,效率更高。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-19
    • 2021-04-07
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多