Für meine Hausaufgaben müsste ich ein Array von Strings dynamisch mit malloc erstellen. A Ich war nicht wirklich in der Lage, bereits verfügbare Lösungen zu verstehen, da es eine etwas andere Art hatte, es zu benutzen als ich meine.C - Ein String-Array dynamisch erstellen (malloc)
MEIN PROBLEM: Kurz gesagt: Ich mache ein textbasiertes Abenteuerspiel. Das Inventar sollte "beliebig groß sein", sagte mein Professor. Wenn die Person keine Gegenstände hat, dann sollte die Größe des Inventars ebenfalls Null sein, mit 1 Gegenstand sollte es nur 1 Gegenstand, usw.-etc.
Ich habe versucht, etwas zu arbeiten, aber ich bin nicht wirklich fähig zu verstehen, wie malloc tatsächlich funktioniert, also hier ist mein Code (der offensichtlich falsch ist, aber wie wäre es richtig zu tun, was ich tun soll ?):
char* inventory;
int amount=0;
inventory=(char*) malloc(sizeof(char)*amount);
//NOW THERE SHOULD BE AN INVENTORY WITH SIZE ZERO SINCE AMOUNT=0
//NOW I WANT TO GIVE THE PLAYER AN ITEM:
amount++;
inventory=(char*) malloc(sizeof(char)*(amount+1);
inventory[0]="sword";
//I WANT TO WRITE OUT INVENTORY TO TEST IF IT WORKS:
printf("%s", inventory[0]);
//FREE THE BITS LOCKED WITH MALLOC:
free(inventory);
Professor lehrt uns, dass wir Menge + 1 wegen des letzten Zeichens einer Zeichenkette sein muss ‚\ 0‘ oder so etwas zu schreiben haben.
So, hier ist, wie ich verstehe, wie malloc Werke (aber vielleicht ist dies nicht, wie es funktioniert, und ich verstehe es falsch): Normalerweise ist dies, wie würden Sie ein Array von Strings zum Beispiel erstellen:
char strings[10][200];
Das würde bedeuten, dass Sie 10 Zeichenfolgen haben, jede kann 200 Zeichen lang sein. Wenn ich malloc wie in meinem Code verwende: Die Zahl 'Betrag' ist im Grunde die gleiche wie die Zahl 10 in meinem Beispiel, und die Größe von (char) ist im Grunde die gleiche wie die Zahl 200 in meinem Beispiel, oder? Wenn nicht, dann bin ich total verloren.
Noch funktioniert mein Code offensichtlich nicht, also würde ich wirklich einige Hilfe von Ihnen schätzen, mit dem Arbeiten von malloc C-Codes und einigen Erklärungen, wenn Sie die Zeit natürlich haben.
'mit Arbeits malloc C codes'..nopes, keine Chance. :) –
In C werden Strings unbekannter/dynamischer Länge durch 'char *' Zeiger auf ihr erstes Zeichen dargestellt. Dieser Zeiger zeigt auf den Anfang des Speichers, der von dieser Zeichenfolge zugewiesen wurde (+ trailing \ 0). Um eine Anzahl von dynamischen Strings zu verwalten, benötigen Sie eine Anzahl von Zeichen, z. ein Array dieser Zeiger. Ein Array von Zeigern ist wiederum etwas Speicherplatz, der durch einen Zeiger auf sein erstes Element repräsentiert wird. Wenn Sie also ein Array von Strings benötigen, könnte das Array als 'char **' deklariert werden, da es auf den ersten Zeiger ('char *') auf einen String zeigt. – JimmyB
Wenn ich die genaue Frage google, sind die ersten 8 Ergebnisse alle Stackoverflow-Fragen zu diesem Thema. Wenn Sie bereits nach Lösungen gesucht haben und keine genaue Antwort gefunden haben, prüfen Sie diese Fragen, damit Sie das Thema verstehen (machen Sie ein Array von Strings dynamisch mit malloc) und entwickeln Sie Ihre eigene Lösung. –