问题描述
我正在尝试创建自己的“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;
}