如何在c中没有getline的情况下在input中查找换行符
我正在尝试创建自己的“getline”函数 为了做到这一点,我需要找到下一个换行符在输入中的位置 我正在尝试使用指针如何在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
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
进行类似处理。