ошибка в c при вводе с клавиатуры более 1024 символов

velet25

в линуксе, если ввести более 1024 символов, он воспринимает излишек как команду.
вопрос: как можно уберечься от этого, т.е. что конкретно нужно написать в коде?

Realist

Ничего не понятно. В Линуксе можно много куда много чего ввести, и далеко не всегда он это будет воспринимать как команду.
Например, запусти vi file.txt и вводи в этот файл сколько хочешь
Опиши конкретно и предметно, в чем проблема.

pitrik2

ЖЕСТЬ так задавать вопросы
Спилберг? непоняяятно

yolki

Как преподаватель, принимающий эти проги, поясню вопрос:
если написать в проге:

char s[21];
scanf("%20s",s);

и ввести с клавиатуры строку длиной 1040 символов, то
1) содержимое в 1024 символов останется в потоке, доступном внутри программы
2) 16 символов останутся в буфере и (если программа после scanf ничего из буфера не берёт и завершается) будут возвращены шеллу. в данном случае - bash-у.
3) bash эти 16 символов (с последующим "enter"-ом) воспримет как команду и будет её трудолюбиво выполнять..
так настроена консоль в дисплейном классе ММ.

Werdna

Как преподаватель, принимающий эти проги
Ты чему детей учишь? Вычитывать из stdin всё надо, если строки.

yolki

а я что делаю?
вот задание: считать строку, чтобы такого не было. (это "общая" формулировка).
чуть-чуть уточняю:
нужно считать имя файла с клавиатуры. имя файла может содержать пробел
ну и требование "разумности" к программе:
не должна падать и если завершается, то чтобы коректно (а не с хвостом из stdin и прочего).

yolki

вы эта... отвечайте, не стесняйтесь...

slonishka

ты чо, препод на мм?

Werdna

вы эта... отвечайте, не стесняйтесь...
Ты ведь преподаешь, ты и учи, я с консолью работать умею.

feliks28

Почитал MSDN, почитал ISO/IEC 9899:TC2 - ничего такого про только 1024 символа не нашел.
А что линуксоиды в качестве форматного хелпа используют?

Trofimovyoa

fflush ?

yolki

я сообщил всю необходимую информацию. даже жирным выделил.
мне что, программу за студента писать?

agaaaa

Не помогает. Это же жесть какая-то.

SPARTAK3959

А разрешима ли эта задача вообще? Если остановить программу перед самым return 0 (или закрытием stdin) и ввести в нее с клавиатуры еще кучу данных, то что с ними будет? Если это не учитывать, то нужно копать в сторону fgets - если последний символ строки не равен \n, то нужно считать лишние символы до конца строки или файла.

yolki

fgets - наш выбор.

Missi4ka

fgets - наш выбор
а если строка в потоке превышает по длине размер буфера, переданный fgets, то что будет делать fgets: вычитает символы из потока или оставит их шеллу, как и scanf?

yolki

так устроен шелл, что больше 4кб за один присест пользователю ввести не дадут :smirk:

Marinavo_0507

Какой ещё нахуй шелл? :ooo:

yolki

ок, это ещё глубже.
Оставить комментарий
Имя или ник:
Комментарий: