Effacement definitif d'une chaine char*

Résolu
ebooserge Messages postés 137 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 16 juillet 2007 - 20 sept. 2005 à 10:10
EMSIEN Messages postés 194 Date d'inscription lundi 26 juillet 2004 Statut Membre Dernière intervention 11 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 ?

6 réponses

julienchr Messages postés 6 Date d'inscription mercredi 12 janvier 2005 Statut Membre Dernière intervention 28 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
3
BunoCS Messages postés 15316 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 octobre 2022 103
20 sept. 2005 à 10:27
A chaque fois que tu remplis ta chaine, n'oublie pas de la terminer par '\0' pour indiquer la fin...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
ebooserge Messages postés 137 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 16 juillet 2007 1
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.
0
BunoCS Messages postés 15316 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 octobre 2022 103
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...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ebooserge Messages postés 137 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 16 juillet 2007 1
20 sept. 2005 à 13:31
merci ca marche ...
0
EMSIEN Messages postés 194 Date d'inscription lundi 26 juillet 2004 Statut Membre Dernière intervention 11 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 =
================
0