Also mit C wieder vertraut erhalte ich, und dieses Konzept hat mich besonders fest.Wie String Array von Strings in C hinzufügen
Das Ziel ist eine dynamisch zugewiesene Array von Strings zu erstellen. Ich habe dies getan, indem ich zuerst ein NULL-Array erstellt habe und für jede eingegebene Zeichenfolge den entsprechenden Speicherplatz zugewiesen habe. Das einzige Problem ist, wenn ich versuche, tatsächlich eine Zeichenfolge hinzuzufügen, bekomme ich einen Seg Fehler! Ich kann nicht herausfinden, warum, ich habe eine Ahnung, dass es von einer unpassenden Zuteilung ist, weil ich nichts falsches mit meiner strcpy Funktion sehen kann.
Ich habe eine Antwort erschöpfend auf dieser Seite sehe, und ich habe Hilfe gefunden, aber das Geschäft nicht ganz schließen kann. Jede mögliche Hilfe, die Sie zur Verfügung stellen können, würde sehr geschätzt werden!
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int count = 0; //array index counter
char *word; //current word
char **array = NULL;
char *term = "q"; //termination character
char *prnt = "print";
while (strcmp(term, word) != 0)
{
printf("Enter a string. Enter q to end. Enter print to print array\n");
// fgets(word, sizeof(word), stdin); adds a newline character to the word. wont work in this case
scanf("%s", word);
//printf("word: %s\nterm: %s\n",word, term);
if (strcmp(term, word) == 0)
{
printf("Terminate\n");
}
else if (strcmp(prnt, word) == 0)
{
printf("Enumerate\n");
int i;
for (i=0; i<count; i++)
{
printf("Slot %d: %s\n",i, array[i]);
}
}
else
{
printf("String added to array\n");
count++;
array = (char**)realloc(array, (count+1)*sizeof(*array));
array[count-1] = (char*)malloc(sizeof(word));
strcpy(array[count-1], word);
}
}
return ;
}
Ah !! Wie albern von mir, es scheint immer die winzigen Details zu sein, die übersehen werden. Das hat geholfen wie ein Zauber. Ich danke dir sehr! – colinmcp
auch, 'fgets (Wort, sizeof (Wort), stdin);' in den Code des OP auf Kommentar, ist falsch, weil 'sizeof' Betreiber nicht die Anzahl der Zeichen von' word' zählt, sondern gibt die Größe der 'word' Variablentyp, und da Wort ein Zeiger' sizeof (Wort) 'ist, wird die Größe eines Zeigers angegeben, dh' sizeof (char *) '. Wenn das OP jedoch diese Lösung verwendet, wird in diesem Fall der Operator "sizeof" angewendet. –
@colinmcp Oh, und auch verhindern, dass Pufferüberlauf zu tun 'scanf („% 79s“, ein Wort);' wobei die Zahl die Größen des Arrays minus 1, da Sie für die Null-Terminierung Byte bilanzieren sollen. –