gpt4 book ai didi

C - 检查字符串是否为空

转载 作者:行者123 更新时间:2023-11-30 18:29:47 25 4
gpt4 key购买 nike

在我的代码C中,我有**行,我需要检查*行是否为NULL,我编写的以下代码可能会使程序崩溃,我不知道为什么
如何检查 *line 是否为 NULL?
(我有 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);
}

最佳答案

您正在 get_next_line() 中测试 *line 是否正确为 null。问题是您从未在 main() 中将 line 初始化为 NULL。由于它尚未初始化,因此在尝试使用它时会出现未定义的行为。

改变

char    *line;

char    *line = NULL;

关于C - 检查字符串是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35493132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com