Pergunta

Ok, pode parecer burro, mas eu não conseguia descobrir uma maneira de passar Int/char para esta chamada do sistema

Aqui está como eu gostaria que funcionasse

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

Espero que isso me dê o seguinte comando no terminal "cal 3 2009"

E o terminal me mostrará o calendário de março de 2009.

Mas o compilador está reclamando que tem muitos argumentos

alguma ideia? Eu preciso fazer este método system ("cal ") Devolva -me um calendário dinâmico.

Notas: cal Pegue o argumento cal month year

Foi útil?

Solução

Você precisa construir a string de linha de comando adequada, system() Não fará isso por você:

char cmd[64];

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

As advertências usuais sobre transbordamento de buffer Aplique, embora neste caso em particular quando ambos os argumentos forem números inteiros, você deve estar bastante seguro.

Outras dicas

Basicamente, basta fazer sua coisa Printf fora da chamada do sistema:

char my_cmd[MAX_SIZE];
snprintf(my_cmd, MAX_SIZE, "cal %d %d", month, year);
system(my_cmd);

Você precisa passar por uma string que já tenha todas as transformações necessárias. Você pode usar o sprintf () para produzir essa corda, apenas tome cuidado para alocar um buffer grande o suficiente.

This happens because you are assuming system behaves like printf, which is not the case. To obtain what you need, you have first to obtain the substitution through sprintf into a buffer, then pass this buffer to system.

Be careful though, this can become a potential security hole, because you are potentially allowing unknown parameters to be passed at command line execution. Also, you have to be careful that the temporary buffer you use is large enough to host your final string.

try

#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);
}

you have to format your command in a string before calling system with it, use snprintf for instance

char
  string[64];

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

system( string );
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top