2009-12-29 70 views
0

我正在試圖從文件中讀取字符中的單詞。問題在於組合人物。我在做它的方式如下:如何從文件流中動態地填充數組C

char *charArr 
while((readChar = fgetc(fp)) != EOF){ 
charArr[i] = readChar; 
i++; 
} 
+0

重複(我認爲)這個問題http://stackoverflow.com/questions/1969242/c-question-how-to-get-two-consecutive-chars-from-a-stream昨天由同一用戶發佈。 – 2009-12-29 15:11:58

+0

除了事實'i'永遠不會增加,並且這很容易發生緩衝區溢出,你在做什麼錯? – James 2009-12-29 15:12:06

+0

我忘了添加它。我想要做的是將文件拆分爲單詞,然後再篩選這些單詞 – bozhidarc 2009-12-29 15:16:29

回答

2

首先,您需要分配一些內存爲您charArr緩衝區;書面,charArr最初不隨地點有意義:

char *charArr = malloc(SOME_INITIAL_SIZE); 

其中SOME_INITIAL_SIZE是大到足以應付大多數情況下。對於那些時間不夠長的情況,您必須使用realloc()來擴展緩衝區。這意味着你也必須保持緩衝區的當前大小的軌跡:

size_t currentSize = 0; 
size_t i = 0; 
char *charArr = malloc(SOME_INITIAL_SIZE); 
if (!charArr) 
{ 
    /** 
    * memory allocation failed: for this example we treat it as a fatal 
    * error and bail completely 
    */ 
    exit(0); 
} 

currentSize = SOME_INITIAL_SIZE; 
while ((readchar = fgetc(fp)) != EOF) 
{ 
    /** 
    * Have we filled up the buffer? 
    */ 
    if (i == currentSize) 
    { 
    /** 
    * Yes. Double the size of the buffer. 
    */ 
    char *tmp = realloc(charArr, currentSize * 2); 
    if (tmp) 
    { 
     charArr = tmp; 
     currentSize *= 2; 
    } 
    else 
    { 
     /** 
     * The realloc call failed; again, we treat this as a fatal error. 
     * Deallocate what memory we have already allocated and exit 
     */ 
     free(charArr); 
     exit(0); 
    } 
    } 
    charArr[i++] = readchar; 
} 

不要忘記,如果你處理數組作爲字符串添加一個0終止。

編輯

然而,更大的問題是,爲什麼你認爲你需要閱讀整個文件的內容到內存中篩選數據之前?你爲什麼不過濾?

+0

這是關鍵的一點,但是您應該使用EXIT_FAILURE或其他*非零*返回碼退出這些失敗情況。 – 2009-12-29 17:02:45

+0

我想編寫的程序的主要思想是讀取C文件並計算其中所有標識符中的每個字母。 所以我做了兩個數組,其中一個使用所有操作符(我將它們稱爲單詞終止符)和ws等,另一個使用所有C關鍵字。 我的想法是通過字符(我把數組放入)讀取文件字符,直到出現一個字終止符。當發生這種情況時,我將數組中的單詞與關鍵字進行比較,如果它不是關鍵字,我會得到它的字符數。 – bozhidarc 2009-12-30 10:16:18