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

如何在c中没有getline的情况下在input中查找换行符,c,input,getline,C,Input,Getline,我正在尝试创建自己的“getline”函数 为了做到这一点,我需要找到下一个换行符在输入中的位置 我正在尝试使用指针input->\u IO\u read\u ptr和函数memchr 问题是input->\u IO\u read\u ptr指向NULL。使这个简单的程序以分段错误告终 有人知道为什么会发生这种情况,以及如何解决它吗 谢谢大家! int main(int argc, char **argv, char **env) { FILE *stream; char *lo

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

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

我正在尝试使用指针
input->\u IO\u read\u ptr
和函数
memchr

问题是
input->\u IO\u read\u 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);
}
(流->\u IO\u read\u 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;
}
(流->\u IO\u read\u 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;
}

您似乎正试图弄乱C库的内部结构。您是否已经检查了您正在使用的任何版本的源代码?你为什么要重新发明这个轮子?如果流指向stdio或其他串行设备怎么办?如果库的用户将流设置为非缓冲,那么您也会遇到问题。您似乎试图破坏C库的内部结构。您是否已经检查了您正在使用的任何版本的源代码?你为什么要重新发明这个轮子?如果流指向stdio或其他串行设备怎么办?如果库的用户将流设置为非缓冲,您也会遇到问题。我知道这是伪代码,但
n
是一个out参数,它会随着缓冲区的增长而更新。对
lineptr
的处理类似。我知道这是伪代码,但
n
是一个out参数,随着缓冲区的增长而更新。对
lineptr
进行类似处理。