Заполните argv [1] в C с максимальным вводом - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь найти простой способ заполнить argv[1] чрезвычайно большой строкой ввода, чтобы увидеть, сколько ввода может обработать моя программа.Любые идеи о простейшем способе сделать это?

Ответы [ 2 ]

2 голосов
/ 20 сентября 2019

Если вы используете оболочку POSIX (например, Bash в Linux или аналогичную), вы можете использовать простой скрипт Python для «заполнения» аргумента и вызывать его с помощью обратного галочка оболочки для выполнения команд «inline»:

./your_program `python -c "print('A'*100)"`

Приведенное выше создаст строку из 100 A символов в качестве первого аргумента программы.

2 голосов
/ 20 сентября 2019

Если вы вызываете вашу программу из оболочки, вы, как правило, пользуетесь этим.

Например, для POSIX, что-то вроде:

./program `printf '%*s' 500 | tr ' ' x`

(Takenиз Создание строки повторяющихся символов в сценарии оболочки )

Вы также можете динамически создавать строку в цикле для проверки программы до ее сбоя и т. д.


Если вам нужно решение C (без запуска другого процесса, например, с использованием чего-то вроде system или API-интерфейсов для ОС), я бы предложил вам переименовать ваш main() в другую функцию, а затем написать новую main(), который вызывает старый с argv настроенным, как вам нравится:

int old_main(int argc, char *argv[]) { ... }

int main()
{
    int argc = 2;
    char *argv[2] = {
        "program",
        "xxxxxxxxxxxxxxxxxxxxxxx",
    };
    return old_main(argc, argv);
}
...