Как использовать scanf в цикле для сохранения символов в массиве с помощью указателей в C - PullRequest
1 голос
/ 28 марта 2019

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

Вот код:

#include <stdio.h>

void inputCharArray(char *beg, char *end){
    char *current = beg;

    while (current != end) {
        scanf("%c ", current);
        current++;
    }
}

int main(void) {
    int size, position;
    position = 0;

    printf("Size of array: ");
    scanf("%d", &size);

    char letters[size];

    printf("Array: ");

    inputCharArray(&letters[0], &letters[size]);

    printf("%s", letters);

    return 0;
}

И вот что я получаю при запуске программы:

Size of array: 3
Array: a s d

as▒

Буду признателен за любую помощь или направление.

1 Ответ

2 голосов
/ 28 марта 2019

Нет '\0' ограничителя строки, записанного в letters[]

В main вам нужно

char letters[size + 1];          // allow for terminator

и функция должна быть

void inputCharArray (char *beg, char *end){
    char *current = beg;

    while (current != end){
        scanf(" %c", current);   // moved the space to other side of %c
        current++;
    }
    *current = '\0';             // added string terminator
}

Я также изменил scanf("%c ", current); на scanf(" %c", current);, потому что он читал символ новой строки, оставленный в буфере после %d спецификатора формата.

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