Как прочитать предложение указателя на символ с помощью scanf ()? - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть указатель на символ: char *sentences;, и я читаю его так:

#include <stdio.h>

int main() {
    char *sentences;
    sentences="We test coders. Give us a try?";
    printf("%s", sentences);
    return 0;
}

, но я хочу читать с функцией scanf() в c.

scanf("%[^\n]s",S);или scanf("%s",S); не сработало.

Как я могу это сделать?

1 Ответ

0 голосов
/ 11 февраля 2019

Вы объявляете переменную char *sentences; и сразу пытаетесь записать в нее значение scanf?Это не сработает.

Если указатель char * не указывает на существующую строку или на память, выделенную с помощью функций malloc -семейства, присваивание ей с помощью scanf или подобного является неопределенным поведением:

char *sentences;
scanf("%s", sentences); // sentences is a dangling pointer - UB

Поскольку вы на самом деле не поделились своим кодом, который использует scanf и не работает, я могу только предположить, что это проблема.

Если вы хотите назначить пользователя-внесенное значение в строку, что вы можете сделать, это объявить его как массив фиксированной длины, а затем прочитать его с помощью подходящей функции ввода.scanf будет работать, если используется правильно, но fgets проще:

char sentence[200];
fgets(sentence, 200, stdin);
// (User inputs "We test coders. Give us a try")

printf("%s", sentence);
// Output: We test coders. Give us a try.

Кроме того, никогда, никогда не используйте gets.

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