如何在普通C中将文本文件读入数组?

时间:2012-01-03 22:50:13

标签: c file gcc io

我正在尝试将整个文本文件读入C中的字符串数组。这是我到目前为止所拥有的:

#include <stdio.h>
#include <time.h>

int main(){
   FILE *fp;
   long lSize;
   char *buffer;
   size_t result;
   int array_val;

   char random_word[100];

   //open fle
   fp = fopen("dictionary.txt", "rb");

   //get file size
   fseek (fp, 0, SEEK_END);
   lSize = ftell(fp);
   rewind(fp);

   //allocate RAM for file
   buffer = (char *) malloc (sizeof(char)*lSize);

   //put file in buffer
   result = fread (buffer, 1, lSize, fp);

   srand(time(NULL));
   array_val = rand()%lSize + 1;

   random_word = result[array_val];
   return 0;
}

然而,当我构建时,它不起作用(duh)并且我得到这些错误:

  

subscripted value is neither array nor vector: line 36

  

warning: incompatible implicit declaration of built in function 'malloc'

全部谢谢!

7 个答案:

答案 0 :(得分:3)

result[array_val]应该是buffer[array_val],但请注意,这只会指向随机字符,而不是随机字。此外,您将无法将结果分配给random_word,因为类型不兼容(您无法分配给数组)。您可以使用memcpystrcpy将字符串复制到数组中,但要小心它,覆盖您不拥有的内存会导致一些奇怪且不可预测的行为。

如果文件中的所有字词都以'\n'个字符分隔,那么作为提示,您可以执行以下操作:

  1. 跳转至buffer
  2. 中的随机字符
  3. 向后搜索最近的'\n'或缓冲区的第一个字符(以先到者为准),你现在有一个指向随机字的第一个字符的指针,
  4. 向前搜索最近的'\n'或缓冲区的末尾(以先到者为准),你现在有一个指向同一个单词的最后一个字符的指针。
  5. 从第一个字符到最后一个字符
  6. 复制到random_word

    您需要添加<stdlib.h>才能使用malloc

答案 1 :(得分:1)

random_word = result[array_val];

resultsize_t,这意味着您无法对其应用索引语法。

答案 2 :(得分:1)

这是一个malloc()示例:http://msdn.microsoft.com/en-us/library/6ewkz86d%28v=VS.71%29.aspx

首先我想: 1.你使用malloc();不需要使用数组就可以调用malloc();

答案 3 :(得分:0)

要包含malloc()的正确实施,您需要#include <stdlib.h>

您从行#36收到的错误很可能是因为您计算随机字的位置的方式,这是不可靠的。

答案 4 :(得分:0)

random_word = result[array_val];

random_word是一个数组。无法在C中分配数组。

答案 5 :(得分:0)

您已将result定义为size_t,您无法通过索引在该代码中实现。

答案 6 :(得分:0)

result不是数组,它只是size_t类型的变量。 random是数组的标题,因此无法更改。