Resolu[c]comment ecrire un entier en parametre de write

Resolu[c]comment ecrire un entier en parametre de write - C++ - Programmation

Marsh Posté le 03-04-2003 à 18:03:28    

Bonsoir ,  
petit pb bien pete cul , j'arrive pas a envoyer un entier avec write , si je caste cet entier en chaine de caractere ca plante .
En fait je veux envoyer une chaine de caractere fixe suivie d'un entier , indefini , sans que ca plante .
 
write(pipe_in[1],buff,strlen(buff));
avec mon buff = "next" + nbre entier .
Y'aurais pas un equivalent de sscanf en ecriture pour un formatage correct?
J'ai essaiyé sprintf , , ca a pas marché...
merci d'avance.


Message édité par psebcopathe le 03-04-2003 à 21:16:50
Reply

Marsh Posté le 03-04-2003 à 18:03:28   

Reply

Marsh Posté le 03-04-2003 à 18:16:00    

montre ton utilisation de sprintf stp

Reply

Marsh Posté le 03-04-2003 à 18:45:03    

vite fait (doit y avoir mieux):
 

Code :
  1. char str[] = "truc";
  2. int len = lstrlen(str);
  3. int nb = 12;
  4. char *buf = new char[len + sizeof (int)];
  5. CopyMemory(buf, str, len);
  6. CopyMemory(buf + len, (char*)&nb, sizeof (int));
  7. write(pipe, buf, len + sizeof (int));
  8. delete[] buf;


 
quand t'as essayé de caster ton int en char*, t'avais bien mis &int et comme taille sizeof (char) ? normalement ca pose pas de pb particulier...

Reply

Marsh Posté le 03-04-2003 à 21:15:52    

bon , ben je vous remercie , j'ai essayé avec ta methode , et j'y suis pas arrive, car je suis sous linux , en C , et le new , il connait pas apparement ...
donc je me suis demerde autrement et ca marche.
Certes c'est plus complique :

Code :
  1. #include <stdarg.h>
  2. void mplayer_pl_next (int number)
  3. {
  4.      mplayer_pl_next_previous_stage2("pt_step %d",number);
  5. }
  6. void mplayer_pl_next_previous_stage2 (const char *format, ...)
  7. {
  8.     va_list ap;
  9.     char *buff=0;
  10.    
  11.     va_start(ap,format);
  12.     vasprintf(&buff,format,ap);
  13.       pthread_mutex_lock (&mplayer_mutex);
  14.     write_mplayer_cmd (buff);
  15.     pthread_mutex_unlock (&mplayer_mutex);
  16.     va_end(ap);
  17. }

Reply

Marsh Posté le 03-04-2003 à 23:09:49    

c'est quoi copy memory?

Reply

Marsh Posté le 04-04-2003 à 01:17:59    

arf. trop de c-unix dans la vie.
 
t'as quand meme droit a malloc ?
Dans ce cas essayes ca a la place du new :

Code :
  1. char *buf = (char*)malloc((len + sizeof (int)) * sizeof (char));


 
Pour l'équivalent de CopyMemory(), si me souviens bien y a memcpy() ki existe, par contre me souviens plus du .h correspondant.

Reply

Marsh Posté le 04-04-2003 à 07:21:23    

<string.h>
 
et c'est une fonction optimisée, donc bien plus rapide. ca fait 2 fois en une semaine que je vois des focntions persos pour faire ça

Reply

Marsh Posté le 04-04-2003 à 10:44:53    

++Taz a écrit :

<string.h>
 
et c'est une fonction optimisée, donc bien plus rapide. ca fait 2 fois en une semaine que je vois des focntions persos pour faire ça


 
euh... la je te suis plus. CopyMemory c'est pas trop une fct perso (définie dans winbase.h)
 
Apres, va savoir laquelle est la plus optimisée...
(Y a aussi une histoire d'exception je crois)

Reply

Sujets relatifs:

Leave a Replay

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