Дополнительно
Как я могу прочитать входной строки неизвестной длины?
Если я не'т знаю, как долго это слово, я не могу написать типа char М[6];
,
Длина слова может быть десять или двадцать.
Как я могу использовать функции scanf, чтобы получить ввод с клавиатуры?
#include <stdio.h>
int main(void)
{
char m[6];
printf("please input a string with length=5\n");
scanf("%s",&m);
printf("this is the string: %s\n", m);
return 0;
}
пожалуйста, введите строку длиной=5 привет это строка: Здравствуйте!
57
9
Введите при обеспечении динамического площадью
Е. Г.
С компьютерами сегодня, вы можете уйти с выделением очень больших строк (сотни тысяч символов) и при этом мало что делает вмятину в компьютере'использование с памяти. Так что я бы'т беспокойтесь слишком много.
Однако, в старые времена, когда память была на вес золота, общей практикой было читать строки на куски. `помощью fgets считывает максимальное число символов из входного, но оставляет остальную часть входного буфера нетронутыми, так что вы можете прочитать все остальное из его, как вам нравится.
в этом примере, я читал куски из 200 символов, но вы можете использовать любой кусок размер вы хотите, конечно.
Обратите внимание, что это упрощенный пример без проверки ошибок; в реальной жизни вы будете иметь, чтобы убедиться, что вход ОК, проверяя возвращаемое значение
помощью fgets
.Также отметим, что в конце, если readinput рутины, никакие байты не зря; в строке точный размер памяти, он должен иметь.
Я'вэ видел только один simple способ чтения сколь угодно длинную строку, но я'ве никогда не использовал его. Я думаю, что это идет как это:
В
м
между%
иS
говоритфункции scanf()
для измерения строки и выделить для него память и скопировать строку в это, и чтобы сохранить адрес этой выделенной памяти в соответствующий аргумент. Как только вы'вновь сделать с ней вам придется бесплатно () это.Это'т поддерживается на каждой реализации функции scanf (), хотя.
Как уже отмечалось, самое простое решение-установить ограничение на длину ввода. Если вы все еще хотите использовать функции scanf (), то вы можете сделать это следующим образом:
Обратите внимание, что размер
М[]
должен быть хотя бы один байт больше, чем число между%
иS
.Если введенная строка не является более чем на 99, то остальные персонажи будут ждать, чтобы быть прочитан с помощью еще одного вызова или остальные строки формате отошли в функции scanf()`.
Вообще то scanf () не рекомендуется для обработки пользовательского ввода. Это'ы лучше всего применять базовые структурированные текстовые файлы, созданные другим приложением. Даже тогда, вы должны знать, что вход не может быть отформатирован, как вы ожидаете, а кто-то, возможно, мешает ему пытаться сломать вашу программу.
Если я могу предложить более безопасный подход:
Объявить буфер достаточно большой, чтобы держать строку:
user_input типа char[255];
Получить ввод пользователя в безопасность путь:
чем fgets(user_input, 255, как stdin);
Безопасный способ получения входного сигнала, первый аргумент является указателем на буфер, в которой входные данные будут храниться, второй вход функция должна читать, а третий-указатель на стандартный поток ввода, т. е. когда пользовательский ввод исходит от.
Безопасности, в частности, исходит из второго аргумента ограничения, сколько будет чтение, которая предотвращает переполнение буфера. Кроме того, чем fgets` заботится о null завершение обрабатываемую строку.
Подробнее об этой функции здесь.
Редактировать: Если вам нужно сделать какие-либо форматирование (например, преобразовать строку в число), вы можете использовать Атой после ввода.
Безопаснее и быстрее (удвоение мощности) версия:
Подвести указатель символов для хранения необходимой строки.Если у вас есть некоторое представление о возможный размер строки, а затем использовать функцию
еще можно тоже выделять память во время выполнения, используя функция malloc() функция, которая динамически запрошенной памяти.
Я знаю, что я приехал после 4 лет, и я слишком поздно но я думаю, что у меня есть другой вариант, что кто-то может использовать. Я использовал
функция getchar ()
, как это:-вот пример выполнения этой программы:-
у меня тоже есть решение со стандартными входами и выходами
Прочитать прямо на выделенное пространство с помощью fgets()`.
Особая осторожность нужна, чтобы отличить успешного чтения, конец файла, ошибка ввода и памяти. Правильное управление памяти на ВФ.
Этот метод сохраняет линию'ы
'\П'
.Пример использования