У меня была проблема сегодня, когда я кодировал функцию, которая использует static char*
в C. Позвольте мне объяснить: моя функция находит '\n'
в буфере, который мы ей отправляем, и если есть текст за '\n'
, он должен помещать этот текст в статическую переменную, которая называется rest
. Дело в том, что оно запасает его, но содержание rest
не сохраняется между двумя вызовами функции. И я не понимаю, почему это происходит, несмотря на то, что оно объявлено как статическая переменная.Статическая переменная в C не «работает»
Вот моя функция до сих пор: (return (1)
означает, что функция не нашел либо \n
и \0
, return (0)
означает, что функция нашла \n
(return -1
) означает, что функция нашла EOF
)
static int end_line(char *buf, char **line)
{
static char *rest;
char *tmp;
rest = NULL;
tmp = ft_strnew(ft_strlen(buf));
tmp = buf;
printf("REST BEGINNING : %s\n", rest);
if (rest != NULL)
{
tmp = ft_strnew(ft_strlen(rest) + ft_strlen(buf));
tmp = ft_strcat(rest, buf);
}
if (!ft_strchr(tmp, '\n') && ft_strchr(tmp, '\0') == NULL)
{
rest = tmp;
return (1);
}
else
{
ft_putstr("OK\n");
*line = ft_strsub(tmp, 0, (ft_strlen(tmp) - ft_strlen(ft_strchr(tmp, '\n'))));
rest = ft_strchr(tmp, '\n') + 1;
if (ft_strlen(ft_strchr(tmp, '\0')) == 0)
return (-1);
return (0);
}
}
Где еще 'test_static' используется отдельно от его декларации? –
'rest = NULL;' ?? – Olaf
Извините test_static - это тест, который я забыл удалить перед публикацией ^^ И в чем проблема, инициализирующая отдых NULL? –