ebooserge
Messages postés137Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention16 juillet 2007
-
20 sept. 2005 à 10:10
EMSIEN
Messages postés194Date d'inscriptionlundi 26 juillet 2004StatutMembreDernière intervention11 juin 2009
-
22 sept. 2005 à 14:28
salut a tous,
voila j'ai un petit avec quelques fondamentaux
je crée une chaine avec
char *chaine;
pour pouvoir l'utiliser dans une boucle et recuperer une chaine a chaque fois.
for(x,y,z)
{
chaine = char [100]; //c'est la longueur -1 de la chaine la plus longue que je souhaite recuperer
//ensuite je recupere ma chaine etc etc etc
cout<<chaine<<endl;
delete[] chaine; //pour liberer la memoire
}
le pb c'est que a chaque fois que la boucle tombe sur une chaine un plus courte que la precedente chaine, il me 'affiche bien mais il affiche egalement la fin de la chaine precedente.
ce qui fait que si la 1ere chaine a resuperer est par exemple "hello world" et la 2e est "salut", au niveau du cout il m'affiche "salut world".
un peu comme s'il n'avait pas effacé la precedente chaine avec le delete[] et qu'il avait ecrit par dessus.
vous voyez une solution ?
julienchr
Messages postés6Date d'inscriptionmercredi 12 janvier 2005StatutMembreDernière intervention28 septembre 2005 20 sept. 2005 à 11:18
la valeur de retour de la fonction recv est le nb de bytes recu
tu doit donc pouvoir faire un truc du genre
int NbBytes=recv(..);
chaine[NbBytes]='\0';
je suis pas tres doue en c++ donc je te garantis pas la reponse
ebooserge
Messages postés137Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention16 juillet 20071 20 sept. 2005 à 11:02
en fait pour tout te dire la chaine une requete contenu dans la fonction
recv(socket,chaine,sizeof(chaine),0);
donc je vois pas trop comment specifier la fin de chaine de caracteres dans le recv ou dans le cout.
BunoCS
Messages postés15476Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention 3 mai 2024103 20 sept. 2005 à 11:13
Ok,
Alors tu peux déclarer ta chaine dynamiquement: chaine = new char[100];
Et si cela ne suffiit pas, tu peux l'initialiser avec le caractère de fin de chaine:
memset(chaine,'\0',100);
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Vous n’avez pas trouvé la réponse que vous recherchez ?
EMSIEN
Messages postés194Date d'inscriptionlundi 26 juillet 2004StatutMembreDernière intervention11 juin 2009 22 sept. 2005 à 14:28
je me demandais est ce que ça sera juste cette solution:
....
cout<<chaine<<endl;
strcpy(chaine,""); //remplir la chaine par le vide ???
// ou bien strcpy(chaine,NULL);
delete[] chaine; //pour liberer la memoire
....
================
http://ntic.blogspirit.com =
================