чтобы проверить, действительно ли ввод действителен для ввода программ C

Например, у меня есть файл, заполненный некоторыми довольно грубыми строками.

12345678900 1111111111111111111111111  1234567890- 1234567890 123456789 12345678 1234567 1234567 123456 12345 1234 123 123 12 1 0 . - :(){ :|:& };: 1sd2f3g4hrtjghkjgfhdgsf env x='() { :;}; echo vulnerable' bash -c "echo this is a test" )(*&^%$#@#$%\^&*()) ;;;;;;;;;;;;;; $#TSDG:we;ggeg;#G; wg;weg3gsdgd \0 \n \a23tssg \x302\ 0x1235123 \243ti8jw90ed8j |92dg $$$$$$$$$$$$ ##$ #!@#$%\^&*()_+ + = ] [ ] \ ? > < " '" 

Как я могу получить эти типы строк для ввода в программу?

Без разрушения? Есть ли лучшее решение?

Что это называется, и где я могу найти ресурсы для такого рода тестирования?

В настоящее время я пытаюсь:

 #! /bin/bash while read l;do printf "$l" | ./c_program;done < test_numbers.txt 

c_program:

 # include <test.h> # include <stdio.h> int main(void) { printf("Number:\n"); int number = GetLong(); printf("Entered: %i\n",number); return 0; } 

3 Solutions collect form web for “чтобы проверить, действительно ли ввод действителен для ввода программ C”

Кажется, вы очень близко подошли к чему-то, что должно сработать. Я бы изменил его так:

 while IFS= read -rl; do printf "%s\n" "$l" | ./c_program; done < test_numbers.txt 
  • Скажем, read l а не read $l .
  • Используйте read -r для чтения «сырых» строк (не интерпретировать обратную косую черту).
  • Используйте IFS= для захвата ведущих и конечных пробелов.
  • Не говорите printf "$l" ; который сломается, если $l содержит % .

Это, похоже, не подходит для xargs , но я смог придумать следующее:

 tr '\n' '\0' < test_numbers.txt | xargs -0 -L1 -I{} sh -c 'printf "%s\n" "$1" | ./c_program' _ {} 
  • tr преобразует новые строки в файл в nulls; -0 указывает xargs ожидать этого.
    • Я сделал это, чтобы получить тот же эффект, что и read -r ; т.е. не интерпретировать обратную косую черту. Там может быть лучший способ.
  • -L1 сообщает xargs для вызова программы один раз для каждой (каждой) строки ввода.
  • Поскольку xargs может обрабатывать только простые команды, используйте sh -c '...' для выполнения конвейера.
 awk {'print $1'} test_numbers.txt |./c_program 
 grep -v '[^0-9]' <infile |./cprogram 

Это будет печатать только пустые строки или строки, содержащие только номера в вашей программе. Вы также можете редактировать каждую строку …

 sed 's/[^0-9]//g' <infile |./cprogram 

Вы можете фильтровать пустоты …

 sed -n 's/[^0-9]//g;/./p' <infile |./cprogram 

Или вы можете включить . и / или знак:

 sed -n 's/[^- .0-9]//g s/[.0-9]*[0-9]-[0-9.]*//g s/[0-9.]*[0-9].[0-9]*[0-9].[0-9]*//g s/[.-]*[.-][.-][^0-9][^ ]*//g /./p' </infile | ./cprogram . sed -n 's/[^- .0-9]//g s/[.0-9]*[0-9]-[0-9.]*//g s/[0-9.]*[0-9].[0-9]*[0-9].[0-9]*//g s/[.-]*[.-][.-][^0-9][^ ]*//g /./p' </infile | ./cprogram 
  • Как сделать вывод для grep неудачным?
  • shell scripting - несколько тестов равенства в одном выражении if
  • Bash - ожидаемое целочисленное выражение
  • Что означает '-size +0' в команде 'test'
  • `test` и` [`- разные бинарные файлы, любая разница?
  • Поймать неожиданный ввод одиночного символа в bash
  • Невозможно сравнить результат lsb_release с строкой в ​​Bash
  • Как проверить, есть ли «другие» разрешения в домашних каталогах
  • Если условие не работает в скрипте над ssh
  • Interesting Posts

    Использование оператора bash «&» с разделителем «;»?

    Как сохранить переменные в скрипте, который может быть разделен между двумя прогонами awk в отношении того же входного файла в скрипте?

    Настройка локальной сети на CentOS

    Как проверить правильность установки tmux на Mac OSX

    Странный случай: текстовый файл, который существует и не существует

    Как я могу создать полностью отбрасываемую среду сборки?

    Как искать совпадение, затем несоответствие в этой строке, но включать контекстные строки для сопоставленной строки?

    Как связать типы файлов на хосте Linux с приложениями Windows через VirtualBox?

    сценарий оболочки для проверки даты между двумя днями

    Горячие клавиши на базе WMI не работают

    Модуль vfat не загружается (я пробовал очевидные исправления)

    Как возобновить «wodim» DVD Burn, прерванный с помощью Ctrl + C?

    PulseAudio: звук работает после первого вызова pacat

    Код выхода в конце скрипта bash

    Как найти процесс со страницей в ядре Linux?

    Linux и Unix - лучшая ОС в мире.