MFC : Pb de buffer

MFC : Pb de buffer - C++ - Programmation

Marsh Posté le 15-07-2004 à 09:53:58    

Jai un petit probleme bizarre avec mes buffers.
C'est surement un truc tout bete mais a 1ere vue je voie pas d'ou ca peux venir.
 
Donc je suis entrain de developper un petit programme en MFC avec des CSocket.
Jai ma fonction OnReceive qui se "lance" des que qqchose est recu sur ma socket :

Citation :


void OnReceive(int nErrorCode)  
{
 int nRead = 0;
 int i;
 char buffer[4096];
 nRead = Receive(buffer, 4096);
 buffer[nRead] = 0;
 /**/
 for (i = 0; i < 4096 ;i++)
  buffer[i] = 0;
}


Et a la place des /**/ si je met ca :

Citation :


for (i = 0; i < nRead ;i++)
 TRACE("%c", buffer[i]);


Tout les caracteres saffichent nickel.
Par contre si je met :

Citation :


TRACE("%s", buffer);


De tps en tps ils naffichent pas tout. Par exemple jai mon nRead a 550 (donc je devrai avoir 550 caracteres qui saffichent) et il ny a que quelque caracteres qui s'affichent.
Je ne sais pas pourquoi il sarrete au milieu car il ny a pas de "\0" a lendroit ou laffichage sarrete.
 
Merci


Message édité par flou1 le 15-07-2004 à 09:55:34
Reply

Marsh Posté le 15-07-2004 à 09:53:58   

Reply

Marsh Posté le 15-07-2004 à 09:59:44    

Citation :

Je ne sais pas pourquoi il sarrete au milieu car il ny a pas de "\0" a lendroit ou laffichage sarrete.

En es-tu sûr ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 15-07-2004 à 10:02:32    

Ben quand je passe par le for je devrais avoir un caractere bizar ki saffiche normalement a la place.
Et ca me semble bizarre que je me retrouve avec un "\0" au milieu dun mot o_O

Reply

Marsh Posté le 15-07-2004 à 10:58:40    

Flou1 a écrit :

Ben quand je passe par le for je devrais avoir un caractere bizar ki saffiche normalement a la place.


Pas sûr. Le \0 est un peu particulier. Le mieux est de tester dans ta boucle

Citation :

Et ca me semble bizarre que je me retrouve avec un "\0" au milieu dun mot o_O


Si tu le dis. Mais mieux vaut être sûr.
 
Au passage, utiliser memset au lieu de ta boucle de mise à zéro.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 15-07-2004 à 11:22:57    

Jai lancé ethereal lorsque je fesais mes tests et en effet de tps en tps le serveur menvoie des "\000" plus ou moins nimporte ou.
 
Merci pour ton aide ;)

Reply

Sujets relatifs:

Leave a Replay

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