删除换行符的功能没有效果?

Jam*_*mes 2 c

我编写了一个函数来包装GNU getline()并删除尾部换行符,但由于某种原因它没有效果.难道我做错了什么?

ssize_t readline(char **lineptr, FILE *stream)
{
  size_t len = 0;  // Size of the buffer, ignored.

  ssize_t chars = getline(lineptr, &len, stream);

  if((*lineptr)[chars] == '\n') {
    (*lineptr)[chars] = '\0';
    --chars;
  }

  return chars;
}
Run Code Online (Sandbox Code Playgroud)

它编译和链接没有问题,但换行符不会被null终止符替换.我已经验证了if()语句是否正在运行.谢谢你的帮助!

md5*_*md5 11

getline返回读取的字符数.所以你必须使用chars-1而不是char.

if ((*lineptr)[chars - 1] == '\n') 
  {
      (*lineptr)[chars - 1] = '\0';
      --chars;
  }
Run Code Online (Sandbox Code Playgroud)

男人getline(3)

如果成功,getline()getdelim()返回数字的字符读,包括:>分界符,但不包括终止空字节.此值可用于处理读取行中的嵌入空字节.