2014-10-18 48 views
2
void initializeCar(Car* v,char* mainFileIn) 
{ 
    int counter = 0; 
    int i = 0; 
    FILE* fp = fopen(mainFileIn, "r"); 
    char* line = NULL; 
    size_t len = 0; 
    ssize_t read; 
    char* pch; 

    while((read = getline(&line, &len,fp)) != -1) 
    { 
     if(i == 50) 
     { 
      printf("Cannot hold more than 50 Cars."); 
      exit(1); 
     } 

     pch = strtok(line,","); 
     v[i].pid = ++counter; 
     v[i].xLocation = (float)strtod(pch,NULL); 

     printf("pch: %s\n",pch); 

     pch=strtok(NULL,","); 
     printf("pch: %s\n",pch); 

     v[i].yLocation = (float)strtod(pch,NULL); 

     pch = strtok(NULL,","); 

     printf("pch: %s\n",pch); 

     v[i].velocity = (float)strtod(pch,NULL); 

     pch = strtok(NULL,","); 

     printf("pch: %s\n",pch); 

     v[i].angle = (int)strtol(pch,NULL, 10); 
     v[i].start = NULL; 
     i++; 

    } 
    free(line); 
    fclose(fp); 
} 

由于某些原因,我的代码中的所有内容除了在我的最后一行之后读取一行外,还给了我一个分段错误。我无法弄清楚为什么,因为我根据getLine教程中的一个while循环来建模http://man7.org/linux/man-pages/man3/getline.3.html为什么我的getLine在这个c函数中走得太远了?

+0

您是否在阅读完之后尝试打印该行,以确保获得了您认为正在获取的数据? – 2014-10-18 05:51:18

回答

3

您的文件末尾可能有空行,导致pch为空。你的程序应该处理不包含逗号的行。

+0

@Aaron你可以接受我的答案......这就是它的工作原理。我不认为你需要rep up to upvote。 – 2014-10-18 07:01:28

+0

@JimBalter需要15代表upvote。如果你赞成这个问题,他可以赞同答案:)无论如何,他确实应该接受答案。 – user3386109 2014-10-18 07:36:25

+1

@ user3386109好的,他现在得到了代表! – 2014-10-18 07:37:57

-1

您正在捕获行尾的\ n字符。

+0

getline确实读取\ n并将其包含在内,但这并不能解释任何内容。 – 2014-10-18 04:48:42

+0

你能解释我是如何捕获\ n字符的?我不太明白如何捕捉它。 – Aaron 2014-10-18 05:49:02

+0

@Aaron getline返回的数据包含换行符(如果有的话)...请参阅文档。那就是你想要的;这不是问题。这个答案是简单的基础。 – 2014-10-18 07:03:32