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îneINTRISTRING code>.