我正在試圖從文件中讀取字符中的單詞。問題在於組合人物。我在做它的方式如下:如何從文件流中動態地填充數組C
char *charArr
while((readChar = fgetc(fp)) != EOF){
charArr[i] = readChar;
i++;
}
我正在試圖從文件中讀取字符中的單詞。問題在於組合人物。我在做它的方式如下:如何從文件流中動態地填充數組C
char *charArr
while((readChar = fgetc(fp)) != EOF){
charArr[i] = readChar;
i++;
}
首先,您需要分配一些內存爲您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終止。
編輯
然而,更大的問題是,爲什麼你認爲你需要閱讀整個文件的內容到內存中篩選數據之前?你爲什麼不過濾?
這是關鍵的一點,但是您應該使用EXIT_FAILURE或其他*非零*返回碼退出這些失敗情況。 – 2009-12-29 17:02:45
我想編寫的程序的主要思想是讀取C文件並計算其中所有標識符中的每個字母。 所以我做了兩個數組,其中一個使用所有操作符(我將它們稱爲單詞終止符)和ws等,另一個使用所有C關鍵字。 我的想法是通過字符(我把數組放入)讀取文件字符,直到出現一個字終止符。當發生這種情況時,我將數組中的單詞與關鍵字進行比較,如果它不是關鍵字,我會得到它的字符數。 – bozhidarc 2009-12-30 10:16:18
重複(我認爲)這個問題http://stackoverflow.com/questions/1969242/c-question-how-to-get-two-consecutive-chars-from-a-stream昨天由同一用戶發佈。 – 2009-12-29 15:11:58
除了事實'i'永遠不會增加,並且這很容易發生緩衝區溢出,你在做什麼錯? – James 2009-12-29 15:12:06
我忘了添加它。我想要做的是將文件拆分爲單詞,然後再篩選這些單詞 – bozhidarc 2009-12-29 15:16:29