2011-06-08 56 views
1

我想使用strtok傳遞文件的行;這些值用逗號分隔。但是,strtok也讀取只包含空格的空白行。在這種情況下,是不是應該返回一個空指針?如何在使用strtok時跳過輸入文件中的空行?

我該如何忽略這樣的行?我試圖檢查NULL,但如上所述,它不起作用。

+0

輸入文件的格式是什麼? – cnicutar 2011-06-08 04:40:15

+0

@cnicutar它是一個純文本文件,每行中有兩個值用逗號分隔。 – drox 2011-06-08 04:51:19

+3

第一次調用'strtok'可能會返回整行作爲第一個標記。爲什麼不在從文件中讀取行後檢查行內容,然後用'strtok'分割它。 – pascal 2011-06-08 04:52:03

回答

0
void function_name(void) 
{ 

    const char delimiter[] = ","; 
    char line_read[9000]; 
    char keep_me[9000]; 
    int i = 0; 

    while(fgets(line_read, sizeof(line_read), filename) != NULL) 
    { 
     /* 
     * Check if the line read in contains anything 
     */ 
     if(line_read != NULL){ 
      keep_me[i] = strtok(line_read, delimiter); 
      i++; 
      } 
    } 

} 

所以說明一下。

您正在使用while循環讀取文件,該循環將整行文件逐行讀取(fgets)到數組line_read中。

每次讀入一行時,它都會檢查它是否包含任何內容(NULL檢查)。

如果它包含的東西是使用strtok解析它,並將其讀入keep_me,否則它將保留在line_read數組中,您顯然不會在程序中使用它。

+1

'line_read!= NULL'將始終爲真:'line_read'是一個數組 – pmg 2011-06-23 21:22:15

+2

在這個答案中有幾個問題,糾正我,如果我錯了。 (1)是@pmg提到的。 'line_read'不是檢查NULL的指針。 (2)'strtok'返回一個'char *',你將它分配給一個存儲字符的內存位置。 (3)調用'strtok'一次不足以讀取行中的多個值。 – drox 2011-07-07 10:22:59

+1

@Dulanja:你是對的;你注意到的所有問題都需要修復。 – pmg 2011-07-07 10:32:12

相關問題