система (); не позволяя мне передавать переменные - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь сделать что-то, что скомпилирует и запустит. c файлов в одной команде. Но у меня проблема. Я получил имя файла через get_string (); в библиотеке the_ cs50.h_.

И теперь я передам функции system() эту команду make {filename}, выполнив это

system("make %s", filename")

Но она просто возвращает эту ошибку:

mac.c:18:23: error: too many arguments to function call, expected single argument '__command', have 2 arguments
    system("make %s", filename);
    ~~~~~~            ^~~~~~~~

Я понимаю, что это означает, что функция system() имеет слишком много аргументов, но я не знаю другого способа добавить имя файла после make.

Вот копию кода, который я использую, если вам нужно взглянуть на него подробнее. Спасибо! Щелкните здесь, чтобы go перейти на страницу github Если вы найдете исправление, либо прокомментируйте его, либо сделайте запрос на перенос на github!

Ответы [ 2 ]

2 голосов
/ 07 мая 2020

Эта ошибка компиляции возникает, потому что system() ожидает только один строковый аргумент.

Если вам нужно сделать команду зависимой от параметра, сначала создайте ее с sprintf:

char command[256];

sprintf(command, "make %250s", filename);
system (command);

Формат %250s предназначен для того, чтобы избежать этого, в том маловероятном случае, когда filename длиннее 250 символов, мы go за пределами из command массив.

Более безопасная функция, позволяющая ограничить общую длину, - snprintf :

snprintf(command, 255, "make %s", filename);
2 голосов
/ 07 мая 2020

system() принимает только один параметр. Вам нужно заранее создать строку, а затем передать ее уже построенной.

Для этого вы, вероятно, ищете функцию вроде sprintf().

...