c - 如何在没有getline的情况下在输入中查找换行符

问题描述

我正在尝试创建自己的“getline”函数

为了做到这一点,我需要找到下一个换行符在输入中的位置。

我正在尝试使用指针 input->_IO_read_ptr函数 memchr

问题在于 input->_IO_read_ptr 指向 NULL。使这个简单的程序以分段错误告终。

有人知道为什么会发生这种情况以及如何解决吗?

谢谢!

int main(int argc,char **argv,char **env)
{
    FILE *stream;
    char *looking = NULL;

    stream = stdin;

    looking = memchr((void *)(stream->_IO_read_ptr),'\n',100);

    return (0);
}

解决方法

(stream->_IO_read_ptr)

前导 _ 对您来说是一个标志,表示不要访问它。

您自己的 getline() 函数应该根据 getc() 实现。

类似的东西

ssize_t mygetline(char **lineptr,size_t *n,FILE *stream)
{
    ssize_t i = 0;
    int c;
    while ((c = getc()) != EOF && c != '\n') {
        if (*n == i + 1) { 
            /* grow buffer */
        }
        lineptr[0][i++] = (char)c;
    }
    lineptr[0][i] = 0;
    return i;
}