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 Réponses :
Vous ne pouvez pas copier une chaîne à l'aide d'une affectation, vous devez utiliser aussi, p> peut être simplifié à: p> strcpy () code>:
Tout d'abord, c'est:
listWords = realloc(listWords, sizeof(char *) * wordCount);
Il y a trois problèmes.
Premier, second, avec 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>
aword = entrementtring; code>, vous laissez
aword Code> Pointez sur
INTRISTRING CODE> au lieu de copier son contenu. Utilisez
Strcpy code> à la place: p>
listWords = realloc(listWords, sizeof(char*) * wordCount);
ARG No:
Aword = (Char *) Realloc (Aword, Strlen (InputString) + 1); Aword = entréeString; code> Vous perdez chacun le tampon alloué. Considérons une copie à la place.
Ne pas lancer Malloc
Tous les éléments de
INPUTString code> point sur la même chaîne
INTRISTRING code>.