Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1312 connectés 

  FORUM HardWare.fr
  Programmation
  C++

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1343448
antix
Posté le 10-04-2006 à 19:00:20  profilanswer
 

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

 

mood
Publicité
Posté le 10-04-2006 à 19:00:20  profilanswer
 

n°1343477
Flaie
No it's necessary
Posté le 10-04-2006 à 20:05:05  profilanswer
 

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!
n°1343480
antix
Posté le 10-04-2006 à 20:10:23  profilanswer
 

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
n°1343489
Flaie
No it's necessary
Posté le 10-04-2006 à 20:27:25  profilanswer
 

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!
n°1343494
franceso
Posté le 10-04-2006 à 20:30:24  profilanswer
 

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
n°1343504
antix
Posté le 10-04-2006 à 20:35:58  profilanswer
 

Merci beaucoup à vous deux, ca marche nickel.

n°1343650
morph
Posté le 10-04-2006 à 23:09:38  profilanswer
 

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


Message édité par morph le 10-04-2006 à 23:10:34
n°1343661
skelter
Posté le 10-04-2006 à 23:20:36  profilanswer
 

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());

n°1344349
Joel F
Real men use unique_ptr
Posté le 11-04-2006 à 17:41:09  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

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

 

Sujets relatifs
Comment crée une function en Batch (Dos)[MySQLi et Classe] "Call to a member function or a non-object"
stdio.h / stdlib.h / etc...h : Où en standrd sous Linux ?methodes abstr avec des arguments generiques dans une classe abstr
Lancer un programme avec des arguments via IE...Lancer un programme VB avec des arguments sous VB 6
Passage d'argumentsMatcher un nombre inconnu d'arguments[Résolu]
Function mail() et serveur smtp persoToo many words from ``
Plus de sujets relatifs à : C++ ==> \stdlib.h too many arguments to function


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR