Effacement definitif d'une chaine char*

[Résolu]
Signaler
Messages postés
137
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
16 juillet 2007
-
Messages postés
194
Date d'inscription
lundi 26 juillet 2004
Statut
Membre
Dernière intervention
11 juin 2009
-
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

Messages postés
6
Date d'inscription
mercredi 12 janvier 2005
Statut
Membre
Dernière intervention
28 septembre 2005

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
Messages postés
15108
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
30 juillet 2021
97
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...
Messages postés
137
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
16 juillet 2007
1
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.
Messages postés
15108
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
30 juillet 2021
97
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...
Messages postés
137
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
16 juillet 2007
1
merci ca marche ...
Messages postés
194
Date d'inscription
lundi 26 juillet 2004
Statut
Membre
Dernière intervention
11 juin 2009

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 =
================