【问题标题】:Why does my getLine in this c function go one line too far?为什么我在这个 c 函数中的 getLine 走得太远了?
【发布时间】:2014-10-18 04:06:58
【问题描述】:
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

【问题讨论】:

  • 您是否尝试在阅读后打印该行,以确保您获得了您认为您正在获得的数据?

标签: c


【解决方案1】:

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

【讨论】:

  • @Aaron 你可以接受我的回答......这就是它在这里的工作方式。而且我认为您不需要代表来投票。
  • @JimBalter 需要 15 个代表才能投票。如果你支持这个问题,他可以支持答案:) 无论如何他都应该接受这个答案。
  • @user3386109 好的,他现在有代表了!
【解决方案2】:

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

【讨论】:

  • getline 确实读取了 \n 并将其包含在行中,但这并不能解释任何事情。
  • 你能解释一下我是如何在我的行中捕获 \n 字符的吗?我不太明白如何不捕捉它。
  • @Aaron getline 返回的数据包括换行符(如果有的话)...请参阅文档。那就是你想要的;这不是问题。这个答案完全不符合要求。
猜你喜欢
  • 2013-09-17
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
  • 2018-09-09
  • 2017-11-24
  • 1970-01-01
  • 1970-01-01
  • 2019-02-26
相关资源
最近更新 更多