从文件中读取值并将它们存储到多维数组中

我是C的新手,所以如果你看到一些显然我很愚蠢的东西,请告诉我:)

我想做什么

我有一个文件,其中有换行符分隔的字符串值,我正在尝试读入我的程序,以便我可以使用它们与其他值进行比较。 我认为存储它们的最佳方法是在多维数组中。 我的代码看起来像这样:

char **data; char *src_line; int counter = 0; /* To keep track of how many items are in this array */ ... while(fgets(src_line,MAX_LINE_SIZE,fp_src_file) != NULL){ int tmp = 0; while(src_line[tmp] != '\0'){ if(src_line[tmp] == '\n'){ src_line[tmp] = '\0'; } tmp++; } strcpy(data[counter],src_line); counter++; } 

在strcpy期间这段错误。 我在网上找到的大多数处理多维数组的资源都使用常量值。 我敢肯定,这可能不是最好的方法。

我的问题

  1. 有没有更好的方法来完成我想要做的事情?
  2. 将未知数量的项目放入多维数组的正确方法是什么。 我应该这样做吗?

谢谢!

正如我在上面评论的那样,我不清楚你是不是为数据正确分配内存,或者你根本没有分配内存:)数据是一个特征。 您希望它是一个字符数组数组,因此您需要(a)为char * s的顶级数组分配内存,然后(b)为字符数组本身分配内存。

因此,如果您有一个未知数量的项目,最简单的解决方案就是提出一个合理的最大值并为该最大值分配足够的,或者您只需查找\ ns,读取文件,然后分配内存适当的数据等等。或者你可以假设你将拥有多少行,相应地分配数据,然后如果/当你用完空间时创建一个大小翻倍的新数组并复制一切。 这听起来比你想要的更多。

另一种可能更简单的方法 – 整个文件,只需创建一个足以容纳整个文件的缓冲区。 读取整个文件。迭代,切换\ ns为\ 0s并计算行数。 然后创建一个大小==你看到的行数的char **并将它们分配给每行的开头。 Voila – 你每行都有一个字符串,你不需要做很多内存分配。

只是提示您现有的代码; strcpy实际上并没有为你分配存储空间,你需要给它一个缓冲区来复制数据。

 data[counter] = malloc(strlen(src_line)+1); strcpy(data[counter],src_line); 

关于以更优雅的方式阅读文件; 既然你正在阅读整个文件;

  • fstat文件以获取size和malloc文件大小+ 1.将fileBuffer [size]设置为0。
  • 通过一个“read”调用读入整个文件到malloc’d块中。
  • 将所有\ n替换为块中的\ 0,同时计算换行符的数量。
  • 分配正确大小的行指针数组(即如果文件不以换行符结尾,则为换行符数+ 1)
  • 循环遍历文件,在\ 0之后将数组中的连续指针设置为第一个内存地址(第一行是特殊情况并直接指向malloc’d块)

这样你就可以在一个块中分配所有文件(并在一个块中自由分配),同时指向每一行。