无法将文件中的条目正确添加到二维指针数组中

马特·科斯(MattKos)

我在将项目添加到C中的2d指针数组时遇到麻烦。我的代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <malloc/malloc.h>
#include "pg3_methods.h"

void load_input(char path[])
{
char ** input = (char**)malloc(sizeof(char));

// Variable to hold current word
char * currentWord = malloc(sizeof(char));

// Set file equal to the path
FILE * file;
file = fopen(path, "r");
int i = 0;

// Checks if file is null
if (file == NULL)
{
    fprintf(stderr, "File %s does not exist.", path);
}

// If not null, cycles through file and adds entries
while (!feof(file))
{
    fscanf(file, "%s", currentWord);
    input = (char**)malloc(sizeof(char)*1);
    input[i] = currentWord;
    printf("input[%i] = %s\n", i, currentWord);
    i++;
}
for (int i = 0; i < sizeof(input); i++)
{
    printf("%s\n", input[i]);
}
}

输出是这样的:

input[0] = The
input[1] = small
input[2] = fox
input[3] = jumped
input[4] = over
input[5] = the
input[6] = red
input[7] = fence
input[8] = bad
input[9] = The
input[10] = small
input[11] = fox
input[12] = jumped
input[13] = over
input[14] = the
input[15] = red
input[16] = fence
input[17] = bad
input[18] = The
input[19] = small
input[20] = fox
input[21] = jumped
input[22] = over
input[23] = the
input[24] = red
input[25] = fence
input[26] = bad

(null)
(null)
bad
(null)
(null)
bad
(null)
(null)

如您所见,它在while循环中工作,但是一旦退出循环,一切都搞砸了。关于如何进行这项工作的任何建议?任何帮助将不胜感激!(注意:输出的第一部分中的单词来自单独的文本文件。)

学徒
char ** input = (char**)malloc(sizeof(char));

这会为单个字符分配足够的内存,这可能不是您想要的。相反,您应该执行以下操作:

char ** input = (char**)malloc(sizeof(char*) * WORD_COUNT);

这将为分配多个指针char现在,您可以将其视为的数组char*

char * currentWord = malloc(sizeof(char));

同样,您只分配一个字符。您可能需要分配更多的内存。

现在,让我们看一下while循环的主体

fscanf(file, "%s", currentWord);
input = (char**)malloc(sizeof(char)*1);
input[i] = currentWord;

这里有几个问题。首先,您不断覆盖内存中的前一个单词。第二,您为其分配了一个新的内存块,input而忽略了已分配的旧内存块(这是内存泄漏)。最后,input数组中的每个指针(假设您要解决的问题是分配一个数组而不是单个字符)都指向内存中的同一字符串。

要解决这些问题,您应该遵循以下伪代码:

  1. 分配足够的内存input以存储指向您将要读入的每个单词的指针。
  2. 在循环:
    1. 分配一个单词的内存
    2. 将单词读到分配的内存中
    3. 分配一个指针input以指向刚读入的这个单词

如果您在将此过程转换为C代码时遇到困难,请提出一个新问题让我们知道。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何添加到二维数组列表

来自分类Dev

Python按列将一维数组添加到二维数组

来自分类Dev

如何将更多JSON条目添加到格式正确的文件中?

来自分类Dev

在JS中将值添加到二维数组中

来自分类Dev

在Perl中将元素添加到二维数组中

来自分类Dev

将元素添加到二维数组的特定部分

来自分类Dev

如何将列表中的元素添加到二维数组?

来自分类Dev

有效地将值添加到二维数组

来自分类Dev

如何将数组添加到二维数组

来自分类Dev

C中的指针算术和二维数组?

来自分类Dev

如何将二维数组直接添加到哈希图中?

来自分类Dev

如何使用Google App脚本/ JavaScript将列添加到二维数组

来自分类Dev

C#将文本文件添加到二维数组

来自分类Dev

在C ++中访问二维指针数组中的值

来自分类Dev

使用C中的指针说明二维数组

来自分类Dev

如何将谷歌分析数据添加到应用脚本中的二维数组中

来自分类Dev

Numpy:将一维数组(行)添加到 Numpy Python 中的空二维数组

来自分类Dev

将数据附加到二维列表中每个条目的开头

来自分类Dev

从 .csv 文件中读取数据以附加到 c 中的二维数组中

来自分类Dev

卡在二维数组上,将指针插入文件中的字符串

来自分类Dev

使用C中的双指针将二维数组放入现有内存中

来自分类Dev

使用指针算法修改函数中的二维数组

来自分类Dev

c中带有char指针的二维数组

来自分类Dev

如何在C(二维数组)中增加指针

来自分类Dev

二维数组无法正确打印

来自分类Dev

将python中的一维或二维数组复制/导出到excel文件?

来自分类Dev

如何将数组添加到二维数组中的每一行?

来自分类Dev

如何将元素添加到空的二维 numpy 数组

来自分类Dev

将二维数组保存在指针数组中

Related 相关文章

  1. 1

    如何添加到二维数组列表

  2. 2

    Python按列将一维数组添加到二维数组

  3. 3

    如何将更多JSON条目添加到格式正确的文件中?

  4. 4

    在JS中将值添加到二维数组中

  5. 5

    在Perl中将元素添加到二维数组中

  6. 6

    将元素添加到二维数组的特定部分

  7. 7

    如何将列表中的元素添加到二维数组?

  8. 8

    有效地将值添加到二维数组

  9. 9

    如何将数组添加到二维数组

  10. 10

    C中的指针算术和二维数组?

  11. 11

    如何将二维数组直接添加到哈希图中?

  12. 12

    如何使用Google App脚本/ JavaScript将列添加到二维数组

  13. 13

    C#将文本文件添加到二维数组

  14. 14

    在C ++中访问二维指针数组中的值

  15. 15

    使用C中的指针说明二维数组

  16. 16

    如何将谷歌分析数据添加到应用脚本中的二维数组中

  17. 17

    Numpy:将一维数组(行)添加到 Numpy Python 中的空二维数组

  18. 18

    将数据附加到二维列表中每个条目的开头

  19. 19

    从 .csv 文件中读取数据以附加到 c 中的二维数组中

  20. 20

    卡在二维数组上,将指针插入文件中的字符串

  21. 21

    使用C中的双指针将二维数组放入现有内存中

  22. 22

    使用指针算法修改函数中的二维数组

  23. 23

    c中带有char指针的二维数组

  24. 24

    如何在C(二维数组)中增加指针

  25. 25

    二维数组无法正确打印

  26. 26

    将python中的一维或二维数组复制/导出到excel文件?

  27. 27

    如何将数组添加到二维数组中的每一行?

  28. 28

    如何将元素添加到空的二维 numpy 数组

  29. 29

    将二维数组保存在指针数组中

热门标签

归档