ошибка в c при вводе с клавиатуры более 1024 символов
Например, запусти vi file.txt и вводи в этот файл сколько хочешь
Опиши конкретно и предметно, в чем проблема.
Спилберг? непоняяятно
если написать в проге:
char s[21];
scanf("%20s",s);
и ввести с клавиатуры строку длиной 1040 символов, то
1) содержимое в 1024 символов останется в потоке, доступном внутри программы
2) 16 символов останутся в буфере и (если программа после scanf ничего из буфера не берёт и завершается) будут возвращены шеллу. в данном случае - bash-у.
3) bash эти 16 символов (с последующим "enter"-ом) воспримет как команду и будет её трудолюбиво выполнять..
так настроена консоль в дисплейном классе ММ.
Как преподаватель, принимающий эти прогиТы чему детей учишь? Вычитывать из stdin всё надо, если строки.
вот задание: считать строку, чтобы такого не было. (это "общая" формулировка).
чуть-чуть уточняю:
нужно считать имя файла с клавиатуры. имя файла может содержать пробел
ну и требование "разумности" к программе:
не должна падать и если завершается, то чтобы коректно (а не с хвостом из stdin и прочего).
вы эта... отвечайте, не стесняйтесь...
ты чо, препод на мм?
вы эта... отвечайте, не стесняйтесь...Ты ведь преподаешь, ты и учи, я с консолью работать умею.
А что линуксоиды в качестве форматного хелпа используют?
fflush ?
мне что, программу за студента писать?
Не помогает. Это же жесть какая-то.
А разрешима ли эта задача вообще? Если остановить программу перед самым return 0 (или закрытием stdin) и ввести в нее с клавиатуры еще кучу данных, то что с ними будет? Если это не учитывать, то нужно копать в сторону fgets - если последний символ строки не равен \n, то нужно считать лишние символы до конца строки или файла.
fgets - наш выбор.
fgets - наш выбора если строка в потоке превышает по длине размер буфера, переданный fgets, то что будет делать fgets: вычитает символы из потока или оставит их шеллу, как и scanf?
так устроен шелл, что больше 4кб за один присест пользователю ввести не дадут
Какой ещё нахуй шелл?
ок, это ещё глубже.
Оставить комментарий
velet25
в линуксе, если ввести более 1024 символов, он воспринимает излишек как команду.вопрос: как можно уберечься от этого, т.е. что конкретно нужно написать в коде?