Мне нужно создать функцию C, которая возвращает строку, считанную из дескриптора файла. Я должен определить макрос READ_SIZE
(который может быть доступен для редактирования). Это READ_SIZE
указывает количество символов, которые нужно читать при каждом вызове read()
. Число может быть только положительным.Бесконечная петля на Get_Next_Line в C
Я также должен использовать одну или несколько статических переменных для сохранения символов, которые были прочитаны, но не отправлены обратно вызывающей функции. Один файл .C (максимум 5 функций, максимум 25 строк для каждой функции) и только один файл .h.
Моя функция Get_Next_Line
должна вернуть свое возвращение без '\ n'. Если больше ничего не читать в дескрипторе файла, или если при чтении возникает ошибка, функция возвращает NULL.
Вот прототип функции:
char *get_next_line(const int fd)
FUNCTIONS ALLOWED: malloc, free, read, write (to use with my_putchar, my_putstr, etc).
Вот что у меня есть, но он не работает. Он делает бесконечный цикл, я пытаюсь понять, почему.
char *my_strcat(char *str1, char *str2)
{
int i;
int j;
int s;
char *strfinal;
i = 0;
j = 0;
s = 0;
if ((strfinal = malloc(sizeof(char) * (my_strlen(str1) + my_strlen(str2)
+ 1))) == NULL)
return (NULL);
while (str1[i] != '\0')
{
strfinal[j] = str1[i];
i++;
j++;
}
while (str2[s] != '\0')
{
strfinal[j] = str2[s];
s++;
j++;
}
free(str1);
strfinal[j] = '\0';
return (strfinal);
}
char *get_next_line(const int fd)
{
int n;
int i;
char *str_to_return;
static char buff[READ_SIZE] = {'\0'};
n = 1;
i = 0;
str_to_return = NULL;
while (n)
{
if (i == 0 && buff == '\0')
{
if ((read(fd, buff, READ_SIZE)) <= 0)
return(str_to_return);
if (i == READ_SIZE - 1 || buff[i] == '\n')
{
n = 0;
str_to_return = my_strcat(buff, str_to_return);
i = -1;
}
}
i++;
}
printf("%s\n", str_to_return);
return (str_to_return);
}
'.C' обычно используется для C++. используйте '.c' для кода C. – Olaf
Использование для циклов сделает это намного проще для вас и для нас. –
так же, как и имена переменных длиной более одной буквы. – interjay