簡體   English   中英

從C中的文件讀取令牌

[英]Reading tokens from a file in C

我正在嘗試從文件中讀取令牌並將其放置在數組中。 我要分多個步驟進行操作,首先要弄清文件中有多少個令牌,以便可以估計數組需要多大的空間。 我能夠使用getline()函數完成此操作。

FILE *crack, *dic;
crack = fopen(crack_file, "r");
dic = fopen(dic_file, "r");

char *lineptr;
size_t n;

int dic_word_count, crack_word_count, crack_line_count;
dic_word_count = crack_word_count = crack_line_count = 1;

while(getline(&lineptr, &n, dic) != EOF)
{
    dic_word_count++;
}

char **dictionary = malloc(8*dic_word_count);

但是當我嘗試對不同的文件執行相同的操作時

while(getline(&lineptr,&n, crack) != EOF)
{
    crack_line_count++;
}
printf("%d",crack_line_count);

永遠不會達到打印語句。 我真的不確定發生了什么,我只是想知道是否有人對正在發生的事情以及可能的解決方案有任何想法。 讓我知道您是否想看更多我的代碼,我正在嘗試保持簡潔而透徹。 提前致謝。

line需要在調用getline()和...之前進行初始化

如果無法讀取行(包括文件結束條件),則getline()返回-1。 如果發生錯誤,則將errno設置為指示原因。”

使用-1作為EOF不一定是-1。

參考

char *lineptr = NULL;
size_t n = 0;
...
while(getline(&lineptr, &n, dic) != -1)

注意:強大的代碼將使用

size_t dic_word_count, crack_word_count, crack_line_count;
... 
printf("%zu", crack_line_count);

我看到的問題:

  1. getline不是標准的C庫函數。 我不知道您正在使用哪個平台,以及對內存分配和釋放的期望是什么。 我強烈建議使用標准C庫函數fgets

  2. 如果getline需要一個指向預分配內存的指針,則存在問題,因為您沒有分配任何內存。 如果getline分配了內存,則需要有代碼來釋放該內存。 兩種方式我都遇到問題。

  3. 您正在為要讀取的每一行遞增dic_word_count ,然后在對malloc的調用中使用8*dic_word_count 您是否假設要轉換為8

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM