-2
votes

Problème en c avec matrice de chaîne où les éléments sont répétés

J'essaie de prendre une quantité inconnue de lignes de console, convertissez chaque ligne en une chaîne à l'aide de MALLOC, puis ajoutez chaque chaîne à un tableau de cordes en réaffectant dynamiquement la mémoire. Mon objectif est d'avoir un tableau où chaque élément est une ligne différente entrée par la console (la boucle tandis que doit se terminer par EOF).

Mon code est ci-dessous. P>

cad\n
cad\n
cad\n


3 commentaires

ARG No: Aword = (Char *) Realloc (Aword, Strlen (InputString) + 1); Aword = entréeString; Vous perdez chacun le tampon alloué. Considérons une copie à la place.


Ne pas lancer Malloc


Tous les éléments de INPUTString point sur la même chaîne INTRISTRING .


3 Réponses :


1
votes

Vous ne pouvez pas copier une chaîne à l'aide d'une affectation, vous devez utiliser strcpy () : xxx

aussi, xxx

peut être simplifié à: xxx


0 commentaires

1
votes

Tout d'abord, c'est:

listWords = realloc(listWords, sizeof(char *) * wordCount);


0 commentaires

1
votes

Il y a trois problèmes.

Premier, realloc code> n'accepte pas un additionnel Aword CODE> mais augmente / diminue le tampon du courant AWORD code>, redonnant probablement un nouveau adresse tout en libérant l'ancien. Donc Aword = (char *) Realloc (Aword, Strlen (InputString) + 1) Code> Adaptera la mémoire à une nouvelle taille, mais vous perdez le contenu écrit sur Aword code> précédemment. Notez que * (lignes de liste + (WordCount - 1)) = AWORD code> permettra à votre liste finale pointer sur aword code>. Utilisez malloc code> au lieu de realloc code>. P>

second, avec aword = entrementtring; code>, vous laissez aword Code> Pointez sur INTRISTRING CODE> au lieu de copier son contenu. Utilisez Strcpy code> à la place: p> xxx pré> p> troisième, vous devez réserver de la place pour les pointeurs de caractères, pas seulement des caractères. P>

listWords = realloc(listWords, sizeof(char*) * wordCount);


0 commentaires