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

Опиши конкретно и предметно, в чем проблема.
ЖЕСТЬ так задавать вопросы
Спилберг? непоняяятно
Спилберг? непоняяятно
Как преподаватель, принимающий эти проги,
поясню вопрос:
если написать в проге:
и ввести с клавиатуры строку длиной 1040 символов, то
1) содержимое в 1024 символов останется в потоке, доступном внутри программы
2) 16 символов останутся в буфере и (если программа после scanf ничего из буфера не берёт и завершается) будут возвращены шеллу. в данном случае - bash-у.
3) bash эти 16 символов (с последующим "enter"-ом) воспримет как команду и будет её трудолюбиво выполнять..
так настроена консоль в дисплейном классе ММ.
поясню вопрос:если написать в проге:
char s[21];
scanf("%20s",s);
и ввести с клавиатуры строку длиной 1040 символов, то
1) содержимое в 1024 символов останется в потоке, доступном внутри программы
2) 16 символов останутся в буфере и (если программа после scanf ничего из буфера не берёт и завершается) будут возвращены шеллу. в данном случае - bash-у.
3) bash эти 16 символов (с последующим "enter"-ом) воспримет как команду и будет её трудолюбиво выполнять..
так настроена консоль в дисплейном классе ММ.
Как преподаватель, принимающий эти прогиТы чему детей учишь? Вычитывать из stdin всё надо, если строки.
а я что делаю?
вот задание: считать строку, чтобы такого не было. (это "общая" формулировка).
чуть-чуть уточняю:
нужно считать имя файла с клавиатуры. имя файла может содержать пробел
ну и требование "разумности" к программе:
не должна падать и если завершается, то чтобы коректно (а не с хвостом из stdin и прочего).
вот задание: считать строку, чтобы такого не было. (это "общая" формулировка).
чуть-чуть уточняю:
нужно считать имя файла с клавиатуры. имя файла может содержать пробел

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

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

вы эта... отвечайте, не стесняйтесь...Ты ведь преподаешь, ты и учи, я с консолью работать умею.
Почитал MSDN, почитал ISO/IEC 9899:TC2 - ничего такого про только 1024 символа не нашел.
А что линуксоиды в качестве форматного хелпа используют?
А что линуксоиды в качестве форматного хелпа используют?
fflush ?
я сообщил всю необходимую информацию. даже жирным выделил.
мне что, программу за студента писать?
мне что, программу за студента писать?
Не помогает. Это же жесть какая-то. 

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

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

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