Problème d'écrasement de données lors d'un remplissage de ListBox
Loki6
Messages postés286Date d'inscriptiondimanche 27 novembre 2005StatutMembreDernière intervention27 décembre 2009
-
10 mai 2007 à 14:42
Loki6
Messages postés286Date d'inscriptiondimanche 27 novembre 2005StatutMembreDernière intervention27 décembre 2009
-
13 mai 2007 à 20:30
Salut à tous,
alors voilà mon problème du jour :
dans mon projet actuel, j'ai un tableau de char ** contenant une sorte de liste de phrases. je désire afficher cette liste dans une listbox MFC.
our cela j'ai une boucle for avec un addstring qui tape dans chaque ligne de mon tableau comme ceci :
for (int i=0;i<m_iCtnLineNr;i++)
m_lbFileContent.AddString(CString(m_cContent[i]));
Avant l'exécution de la boucle mon tableau contient les valeurs suivantes :
m_cContent[0] = "ceci est un essai daffichage d'un texte contenu dans un fichier ini."
m_cContent[1] = "ce programme ne fait rien d'autre"
m_cContent[2] = "............etc...."
Ensuite je poursuis l'exécution. Et bizarrement, lorsque le curseur quitte la ligne de AddString, il se passe ceci :
m_cContent[0] = "ceci est un essai daffichage d'un texte contenu dans un fichier ini."
m_cContent[1] = "17;Xš *avec ici un petit carré qui ne veut pas apparaitre comme dans Visual* "
m_cContent[2] = "............etc...."
Et le pire c'est que si je continue le déroulement de l'application, mes autres valeurs ne bougent pas.
je ne comprend pas comment ça peut arriver... un même espace serait-il alloué deux fois ?
si la même question avait été résolue sur le forum sans que je la vois, ayez l'obligeance de me filer l'adresse svp.
pour si nécessaire voilà l'allocation de mon tableau, classique... :
m_cContent = new char * [nbligne];
for (int j=0;j<nbligne;j++)
m_cContent[j] = new char [255];
et les déclaration et utilisation de ma variable de ListBox, classique aussi... :
CListBox m_lbFileContent;
m_lbFileContent.ResetContent();
merci d'avance pour votre aide.
Loki
A voir également:
Problème d'écrasement de données lors d'un remplissage de ListBox
cs_louis14
Messages postés793Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention10 février 20218 11 mai 2007 à 08:43
le petit carré correspond à un caractère non affichable dans une listbox ( CR, LF ou autres caractères). Je pense qu'il doit te manquer un zéro terminal dans une des tes string ou un dépassement de taille du tableau.
Pourquoi ne fais-tu pas simplement un tableau de string afin de ne pas avoir à règler le problème du zéro terminal.
Loki6
Messages postés286Date d'inscriptiondimanche 27 novembre 2005StatutMembreDernière intervention27 décembre 20092 11 mai 2007 à 16:49
le zéro terminal est automatiquement généré lors de la création de chaines de caractères...
mais je ne suis pas sur que tu ais bien compris mon problème. mon tableau de chaines va nickel.
le problème est que lorsque je stocke ma chaine m_cContent[0] dans la listbox au moyen de AddString(), ma chaine m_cContent[1] est écrasée par je ne sais quel moyen lors de l'appel de AddString(), alors que lorque j'ajoute m_cContent[1], m_cContent[2] est laissé en paix de même que m_cContent[3] avec m_cContent[2] etc...
C'est bizarre car normalement AddString ne modifie pas le paramètre qui lui est mis.
merci quand même pour ta réponse. si tu as d'autres suggestions n'hésite pas de même que les nombreux autres visualisateurs qui ne se sont pas risqués à un commentaire :p
cs_louis14
Messages postés793Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention10 février 20218 12 mai 2007 à 09:16
essaie de faire ceci pour décomposer la fonction et vérifier en mode debug les strings :
CString str;
for(i= ...)
{
str = m_cContent[i], //point de debug ici pour vérifier la valeur de str
m_lb>FileContentAddstring(str);
}
Loki6
Messages postés286Date d'inscriptiondimanche 27 novembre 2005StatutMembreDernière intervention27 décembre 20092 13 mai 2007 à 20:30
j'essaierai ta solution lundi louis14, car j'ai pas le projet chez moi.
pour ce qui est de voir les valeurs en debug c'est de cette manière que je me suis aperçu qu'une de mes chaines se transformait lors de l'export d'une autre.