C++ ==> \stdlib.h too many arguments to function

C++ ==> \stdlib.h too many arguments to function - C++ - Programmation

Marsh Posté le 10-04-2006 à 19:00:20    

Bonjour, je souhaite creer un programme pour limiter l'utilisation du pc par mes enfants, mais la compilation plante à cette ligne:

 
Code :
  1. system ("net user %s %s /time:%s", utilisateur, mdp, horaires);
 

Erreur ==> 356 C:\Dev-Cpp\include\stdlib.h too many arguments to function `int system(const char*)'

 

Quelqun aurait il une idée ?

 

Merci

 

Reply

Marsh Posté le 10-04-2006 à 19:00:20   

Reply

Marsh Posté le 10-04-2006 à 20:05:05    

Ben system() ne prends qu'un paramètre, c'est pas un printf like.
 
Tu peux utiliser s(n)printf ou asprintf, pour créer la chaine a passer à system().
 
Du style :

Code :
  1. char *str;
  2. asprintf(&str, "net user %s %s /time:%s", utilisateur, mdp, horaires);
  3. system(str);


 
Y'a qu'a tester une erreur possible de asprintf (renvoie -1), etc...


Message édité par Flaie le 10-04-2006 à 20:05:40

---------------
Always wear a camera!
Reply

Marsh Posté le 10-04-2006 à 20:10:23    

Merci flaie,
asprintf ne marche pas pour moi, par contre avec sprintf j'ai l'erreur suivante:
38 C:\Documents and Settings\antix.ADRIEN\Mes documents\dec\main.cpp cannot convert `char**' to `char*' for argument `1' to `int snprintf(char*, size_t, const char*, ...)'  
JE débute vraiment en programmation quelqun pourrait il m'éclairer ?
 
Ps: j'ai aussi essayer :  
-strcat(chaine1, chaine2)
==> 41 C:\Dev-Cpp\include\string.h too many arguments to function `char* strcat(char*, const char*)'
Je sais que je pourrais simplement taper sa dans l'invite de comande, mais ca serai moin "marant", quand à "coder réellement", je vais déja essayer de réussir mon programme pour continuer..
 

Message cité 1 fois
Message édité par antix le 10-04-2006 à 20:11:48
Reply

Marsh Posté le 10-04-2006 à 20:27:25    

antix a écrit :

asprintf ne marche pas pour moi


Ah, j'avais même pas fait gaffe apparemment asprintf n'est pas dispo sous Windows par défaut ?.
 
Bon dans ce cas là utilise s(n)printf, mais il faut modifier l'appel.
 
Si tu veux pas t'emmerder avec l'allocation de mémoire (sachant que sprintf te renvoie la taille de la chaîne formatée, suffirais de faire un malloc après, ou voir si tu ne trouves pas asprintf pour Win) tu peux faire ça comme ça :

Code :
  1. char str[256];
  2. snprintf(str, 256, "net user %s %s /time:%s", utilisateur, mdp, horaires);
  3. system(str);


 

antix a écrit :

Ps: j'ai aussi essayer :  
-strcat(chaine1, chaine2)
==> 41 C:\Dev-Cpp\include\string.h too many arguments to function `char* strcat(char*, const char*)'
Je sais que je pourrais simplement taper sa dans l'invite de comande, mais ca serai moin "marant", quand à "coder réellement", je vais déja essayer de réussir mon programme pour continuer..


Idem, strcat prends 2 arguments, la chaîne cible dans laquelle on va concaténer le deuxième argument (une deuxième chaîne).
Mais il faut allouer la mémoire pour chaine1.


---------------
Always wear a camera!
Reply

Marsh Posté le 10-04-2006 à 20:30:24    

Code :
  1. char cmd[256];
  2. snprintf( cmd, 256, "net user %s %s /time:%s", utilisateur, mdp, horaires);
  3. system( cmd );


 
cmd est déjà l'adresse de ta chaîne de caractères. Inutile de passer son adresse &cmd.
snprintf est plus sûr que sprintf : ça t'évite de faire une erreur de segmentation si la chaîne de caractères est plus grande que ce que tu as alloué
 
EDIT : Flaie a été plus rapide !


Message édité par franceso le 10-04-2006 à 20:31:44

---------------
TriScale innov
Reply

Marsh Posté le 10-04-2006 à 20:35:58    

Merci beaucoup à vous deux, ca marche nickel.

Reply

Marsh Posté le 10-04-2006 à 23:09:38    

si tu veux faire du c++ utilise std::ostringstream


Message édité par morph le 10-04-2006 à 23:10:34
Reply

Marsh Posté le 10-04-2006 à 23:20:36    

ou std::string dans ce cas, il ne s'agit que de concatener des chaines
 

Code :
  1. std::system(std::string("net user " + utilisateur + " " + mdp + " /time:" + horaires) . c_str());

Reply

Marsh Posté le 11-04-2006 à 17:41:09    

skelter a écrit :

ou std::string dans ce cas, il ne s'agit que de concatener des chaines


 
ou pas :)
 

Code :
  1. ostringstream cmd;
  2. cmd << "net user " << utilisateur << " " << mdp << " /time:" << horaires;
  3. system(cmd.string().c_str());


 
Ca reste plsu flexible si y a des bouts de parametres qui seront différents d'une chaine :o

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed