【问题标题】:Having issues with double pointers双指针有问题
【发布时间】:2020-05-24 14:45:00
【问题描述】:

我正在尝试编写一个程序来读取多个文件并将所有单词存储在一个字符串数组中。以下是部分代码:

这是我应该将单词放入的数组:

我还为这个数组动态分配内存并释放它,所以问题不在于那个。出于某种原因,在 while 循环之后,当我尝试打印出数组时,它是空的,就像没有写入任何内容一样。

如果您需要代码的任何其他部分,请告诉我,我很乐意发布。

【问题讨论】:

标签: c arrays string pointers


【解决方案1】:

假设word_collection.all_words 对您正在使用的所有索引都有效,那么赋值

word_collection.all_words[wc_pos++] = word;

将使word_collection.all_words所有 元素指向完全相同的位置:单个word 数组的第一个元素。

这是一个问题,还有另一个可能的问题:如果word不是全局变量,那么一旦定义word的函数返回,word的生命周期就会结束,使所有这些指针无效。

要解决这两个问题,您还需要为每个元素分配内存,并从word 复制字符串。这可以通过常用的strdup函数来完成:

word_collection.all_words[wc_pos++] = strdup(word);

当然你要记住freestrdup返回的所有指针。

【讨论】:

  • 那个 char word 基本上是一个扫描的词,我每次从文件中扫描一个新词时都会回收它,这是唯一的用途。为了分配内存,我这样做了: word_collection.all_words = malloc(100 * sizeof(char*));这足够了吗,还是我必须专门 malloc 每个字符串?
  • 我也免费,我免费(word_collection.all_words)我认为应该做的工作,对吧?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-08
  • 2014-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多