2011-06-08 162 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

相关问题