初始化未知大小的二维数组

pao*_*rdo 1 c arrays

我有一个2-D字符数组,例如char aList[numStrings][maxLength].理想情况下,在程序执行期间,我希望能够修改aList的内容,即添加,修改或删除条目.由于aList可能会发生变化,因此我不想在每次修改aList之后重新编译我的程序.所以我想在程序结束时将aList写入文本文件,然后在下一个程序运行开始时将其读回aList.

但是,我不知道在程序启动时numStrings的值是多少.(我没有使用C99,所以我不能使用VLA,并从外部文件中获取先前字符串的数量.)当然,我可以将numStrings设置为人为的高值,但是那个格栅!

有没有办法在不知道numStrings值的情况下填充aList?我认为没有(我已经查看过相关问题),但还有另一种方法可以实现我的需求吗?

dmc*_*kee 9

如果你真的想要从网格中间删除项目(你的问题不清楚),你需要某种多重链接结构.这些通常用于实现稀疏数组,因此您可能会找到一个预制数组.

我在谈论这样的事情:

+---+  
| A |  
+-|\+  
  | \  
  |  \  
  |   \  
  |    \
  |     +----+----+----+  
  |     | C0 | C1 | C2 | ...  
  |     +--|-+----+--|-+  
  |        |         |
  |        |         |  
+-V--+  +--V-+       | +----+
| R0 |->|a0,0|-------+>|a0,3|--> ...
+----+  +--|-+    +--V-+----+
| R1 |-----+----->|a1,2|--> ...
+----+     |      +--|-+
 ...       V         |
          ...        V
                    ...  
Run Code Online (Sandbox Code Playgroud)

其中A是对象的根节点,C是列指针的数组,R是行指针的数组,并且每个单元沿其行和列指向它的下一个邻居.假定未明确表示的所有单元都具有一些默认值(通常为NULL或0).

这是一个简单的想法,但是相当挑剔的实现,有很多机会搞砸,所以如果可以,请使用调试库.

  • 对于ASCII gfx :) +1 - 您是否使用工具来创建它? (2认同)