Question

Ok il pourrait semble stupide, mais je ne pouvais pas trouver un moyen de passer int / char dans cet appel système

Voici comment je voudrais que cela fonctionne

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

Je pense que cela va me donner la commande suivante sur « cal 3 2009 » borne

et le terminal va me montrer le calendrier Mars 2009.

Mais le compilateur se plaint qu'il a trop d'arguments

des idées? Je dois faire cette méthode system ("cal ") me retourner un calendrier dynamique.

Notes: cal prennent le cal month year argument

Était-ce utile?

La solution

Vous devez construire la chaîne appropriée de ligne de commande, system() ne le fera pas pour vous:

char cmd[64];

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

Les mises en garde habituelles sur dépassement de mémoire tampon appliquent, bien que dans ce cas particulier lorsque les deux arguments sont entiers, vous devriez être assez sûr.

Autres conseils

En fait, il suffit de faire votre truc printf de l'appel système:

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

Vous devez passer une chaîne qui a déjà toutes les transformations nécessaires effectuées. Vous pouvez utiliser sprintf () pour produire une telle chaîne, juste être prudent avec l'allocation d'un assez grand tampon.

Cela se produit parce que vous assumez le système se comporte comme printf, ce qui est le cas. Pour obtenir ce dont vous avez besoin, vous devez d'abord obtenir la substitution par sprintf dans un tampon, puis passer ce tampon au système.

Attention cependant, cela peut devenir un trou de sécurité potentiel, parce que vous êtes potentiellement inconnus permettant à des paramètres passés à l'exécution être la ligne de commande. En outre, vous devez veiller à ce que la mémoire tampon temporaire que vous utilisez est suffisamment grande pour accueillir votre chaîne finale.

essayer

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

vous devez formater votre commande dans une chaîne avant d'appeler avec système, utilisez snprintf par exemple

char
  string[64];

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

system( string );
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top