C-检查str是否为null

C-检查str是否为null,c,C,在我的代码C中,我有**行,我需要检查*行是否为空,我编写了以下代码,可以使程序崩溃,我不知道为什么 如何检查*行是否为空 (我有0个警告,0个错误:-Wall-Werror-Wextra) 源代码: #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include "libft/libft.h" # define BUFF_SIZE 16 int read_buffer(int

在我的代码C中,我有**行,我需要检查*行是否为空,我编写了以下代码,可以使程序崩溃,我不知道为什么
如何检查*行是否为空
(我有0个警告,0个错误:-Wall-Werror-Wextra)
源代码:

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include "libft/libft.h"
# define BUFF_SIZE  16

int     read_buffer(int const fd, int ret, char **endl, char **buffer)
{
    char    buff[BUFF_SIZE + 1];

    ret = read(fd, buff, BUFF_SIZE);
    buff[ret] = '\0';
    if (ret > 0)
    {
        *buffer = ft_strjoin(*buffer, buff);
        *endl = ft_strchr(*buffer, '\n');
    }
    return (ret);
}

int     get_next_line(int const fd, char **line)
{
    static char *buffer;
    char        *endl;
    int         ret;

    if (!buffer && !(buffer = ft_memalloc(BUFF_SIZE + 1)))
        return (-1);
    if (!*line) // HERE, program crash
        *line = my_strdup("");
    ret = 1;
    endl = ft_strchr(buffer, '\n');
    while (ret > 0)
    {
        ret = read_buffer(fd, ret, &endl, &buffer);
        if (endl)
        {
            buffer[endl - buffer] = '\0';
            *line = my_strdup(buffer);
            buffer = my_strdup(endl + 1);
            return (1);
        }
        if (ret == 0)
        {
            if (ft_strcmp("", *line) == 0)
            {
                *line = my_strdup(buffer);
                return (1);
            }
            return (0);
        }
    }
    return (ret);
}

int     main(void)
{
    int     fd;
    int     ret;
    char    *line;

    if ((fd = open("b.txt", O_RDONLY)) < 3 && fd != 0)
        return (-1);
    printf("%d\n", fd);
    ret = get_next_line(fd, &line);
    printf("%d - %s\n", ret, line);
    ret = get_next_line(fd, &line);
    printf("%d - %s\n", ret, line);
    ret = get_next_line(fd, &line);
    printf("%d - %s\n", ret, line);
    ret = get_next_line(fd, &line);
    printf("%d - %s\n", ret, line);
    return (0);
}
#包括
#包括
#包括
#包括“libft/libft.h”
#定义BUFF_大小16
int read_缓冲区(int const fd,int ret,char**endl,char**buffer)
{
字符缓冲[缓冲大小+1];
ret=读取(fd、buff、buff\U大小);
buff[ret]='\0';
如果(ret>0)
{
*缓冲区=ft_strjoin(*缓冲区,浅黄色);
*endl=ft_strchr(*缓冲区,'\n');
}
返回(ret);
}
int get_下一行(int const fd,字符**行)
{
静态字符*缓冲区;
char*endl;
int ret;
如果(!buffer&&!(buffer=ft_memalloc(BUFF_SIZE+1)))
返回(-1);
if(!*line)//此处,程序崩溃
*行=我的标准(“”);
ret=1;
endl=ft_strchr(缓冲区“\n”);
而(ret>0)
{
ret=读取缓冲区(fd、ret、endl和缓冲区);
如果(endl)
{
缓冲区[endl-buffer]='\0';
*line=我的备份(缓冲区);
buffer=my_strdup(endl+1);
申报表(1);
}
如果(ret==0)
{
如果(ft_strcmp(“,*行)==0)
{
*line=我的备份(缓冲区);
申报表(1);
}
返回(0);
}
}
返回(ret);
}
内部主(空)
{
int-fd;
int ret;
字符*行;
如果((fd=open(“b.txt”,Ordonly))<3&&fd!=0)
返回(-1);
printf(“%d\n”,fd);
ret=获取下一行(fd和行);
printf(“%d-%s\n”,ret,行);
ret=获取下一行(fd和行);
printf(“%d-%s\n”,ret,行);
ret=获取下一行(fd和行);
printf(“%d-%s\n”,ret,行);
ret=获取下一行(fd和行);
printf(“%d-%s\n”,ret,行);
返回(0);
}

您正在测试
*line
中的
获取下一行()
是否正确为空。问题是您从未在
main()
中将
line
初始化为
NULL
。因为它是未初始化的,所以在尝试使用它时会出现未定义的行为

改变

char    *line;


如果(行&&!(*行))呢。。非常感谢,它起作用了!
char    *line = NULL;