comment passer int / char dans le système () un appel système Linux
-
22-08-2019 - |
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
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 );