我编写了一个函数来包装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()返回数字的字符读,包括:>分界符,但不包括终止空字节.此值可用于处理读取行中的嵌入空字节.