Как правильно сохранить строку ввода в массив символов с помощью указателей? - PullRequest
0 голосов
/ 21 сентября 2019
#include <stdio.h>
#include <stdlib.h>

int main()
{
    char string[100];
    int count=0;

    char *pString = string;

    printf("Enter a string: \n");
    scanf("%s",string);

    while(*pString != '\0')
        count++;

    printf("String is %d characters long",count);


    return 0;
}

Вот мой код.Я хочу написать простую функцию для подсчета количества символов в массиве строк.Проблема в том, что он застревает после ввода строки.И консоль просто зависает.Это не освобождает вывод.

1 Ответ

1 голос
/ 21 сентября 2019

Вы можете использовать что-то вроде

#include <stdio.h>
#include <stdlib.h>

int main() {
    char string[100];
    int count = 0;

    printf("Enter a string: \n");
    char *pString = fgets(string, sizeof(string), stdin);
    if (pString == NULL) {
        fprintf(stderr, "failure reading from stdin\n");
        exit(1);
    }
    while (*pString != '\0' && *pString != '\n') {
        pString++;
        count++;
    }

    printf("String is %d characters long", count);
    return 0;
}

Он использует fgets, который также проверяет длину буфера.fgets возвращает также новую строку, которую вводят пользователи, поэтому дополнительная проверка для \ n.Как и в комментариях, упомянутых Арвином, в цикле должен быть увеличен указатель на символ.

...