2012-01-03 134 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是數組的標題,因此無法更改。