как передать int / char в system () системный вызов Linux - PullRequest
4 голосов
/ 31 марта 2009

Хорошо, это может звучать глупо, но я не мог найти способ передать int / char в этот системный вызов

вот как я бы хотел, чтобы это работало

system ("cal %d %d", month, year);

Я ожидаю, что это даст мне следующую команду на терминале "cal 3 2009"

и терминал покажет мне календарь на март 2009 года.

Но компилятор жалуется, что у него слишком много аргументов

есть идеи? Мне нужно, чтобы этот метод system ("cal ") вернул мне динамический календарь.

Примечания: cal принять аргумент cal month year

Ответы [ 7 ]

8 голосов
/ 31 марта 2009

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

char cmd[64];

snprintf(cmd, sizeof cmd, "cal %d %d", month, year);
system(cmd);

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

3 голосов
/ 31 марта 2009

По сути, просто выполните команду printf из системного вызова:

char my_cmd[MAX_SIZE];
snprintf(my_cmd, MAX_SIZE, "cal %d %d", month, year);
system(my_cmd);
1 голос
/ 31 марта 2009

1001 * попробовать *

#include <stdlib.h>
#include <stdio.h>

int main()
{
  char command_buf [20];
  const int month = 3;
  const int year = 2009;
  snprintf(command_buf, sizeof(command_buf), "cal %d %d", month, year);
  system(command_buf);
}
1 голос
/ 31 марта 2009

Это происходит потому, что вы предполагаете, что система ведет себя как printf, а это не так. Чтобы получить то, что вам нужно, вы должны сначала получить замену через sprintf в буфер, а затем передать этот буфер в систему.

Будьте осторожны, это может стать потенциальной дырой в безопасности, потому что вы потенциально допускаете передачу неизвестных параметров при выполнении командной строки. Кроме того, вы должны быть осторожны, чтобы используемый временный буфер был достаточно большим для размещения вашей последней строки.

1 голос
/ 31 марта 2009

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

0 голосов
/ 31 марта 2009
char
  string[64];

sprintf( string, "cal %d %d", month, year );

system( string );
0 голосов
/ 31 марта 2009

вы должны отформатировать вашу команду в строку перед вызовом системы с ней, используйте snprintf, например

...