Почему функция не видит символ "NULL" - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь создать программу, которая будет выделять память для чтения нового символа, пока не будет прочитан нулевой символ, но, похоже, он не работает

printf в строке, которая комментируется (после условия цикла while), показывает, на какое значение указывает c + i, я только что проверил, и даже если он показывает мне символ NULL (он просто печатает '- - ', Я предполагаю, что это символ NULL?) Цикл продолжается.

char *read(char *c) {

    int i=0;

    c=(char*)malloc(1);
    scanf("%c", c+i); 

    while (*(c+i)) {
        //printf("-- %c --", *(c+i));

        i++;
        c=(char*)realloc(c,i+1);
        scanf("%c", c+i);
    }

    return c;
}

1 Ответ

1 голос
/ 01 апреля 2019

Ваша реализация не останавливается, потому что она никогда не читает символ NULL.Когда вы нажимаете клавишу типа RETURN / ENTER, консоль генерирует последовательность новой строки (в некоторых операционных системах, таких как Linux, «\n» или в некоторых других, например Windows, «\r\n»).

Имея этосказал, что вы можете затем изменить ваше условие while, чтобы проверить, является ли символ чтения '\n' или '\r', чтобы закончить чтение, вместо проверки, было ли это NULL.Это решение остановит чтение , как только пользователь нажмет клавишу возврата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...