2012-01-03 133 views
-1

我想读取整个文本文件到C中的字符串数组这是我到目前为止有:如何在纯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; 
} 

然而,当我建,它不工作(废话),我得到这些错误:

subscripted value is neither array nor vector: line 36

和:

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

谢谢大家!

+0

请尝试评论以解释反对票,以便OP可以改善他们拥有的东西。 – 2013-11-15 18:21:39

回答

1

random_word = result[array_val];

resultsize_t,这意味着你不能索引语法适用于它。

3

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

如果所有的在你的文件的文字,被'\n'字符分隔,然后作为小费,你可以做到以下几点:

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

您需要包括<stdlib.h>才能使用malloc

+1

有关如何做到这一点的帮助吗? – 2012-01-04 18:36:23

0

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

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

0

random_word = result[array_val];

random_word是一个数组。数组不能在C中分配。

0

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

1

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

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

+1

你能澄清你最后一句话吗?这对我没有意义。 – 2012-01-04 23:58:17

+0

我的意思是:当你想调用一个随机数时,你可以动态地调用存储在内存中的随机数,你不需要使用arrays.this是我的提议 – 2012-01-05 05:21:08

+0

你的代码发现了一些问题?导致[array_val]; ??? – 2012-01-05 05:26:29

0

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