frage mich, ob ich Hilfe mit dieser einfach verknüpften Liste Problem bekommen könnte.Warum zeigen alle meine Knoten auf das gleiche Zeichenarray?
So habe ich eine einfache Struktur mit einem nächsten Zeiger und Char-Zeiger, um jeden Knoten zu bilden.
struct node{
char * nodeName;
node * next;
}
in meiner Hauptfunktion, ich erstelle Namen einen dynamisch zugewiesenen Array von Zeichen genannt, die auf eine Funktion gesendet werden, dass es jedes Mal einen neuen Knoten erzeugt aufgerufen wird, wird ein neuer Name durch eingegeben werden soll der Benutzer jedes Mal und soll jedem neu erstellten Knoten zugewiesen werden, aber aus bestimmten Gründen nehmen ALLE Knoten den eingegebenen endgültigen Namen an.
Meine Vermutung ist, dass alle Knoten alle auf das gleiche Char-Array zeigen, aber ich weiß nicht, wie das zu beheben ist. Hier ist mein Code.
int main()
{
char * name = new char[MAX_SIZE]; // dynamic array declaration;
for(int i = 0; i < 3; ++i) // do it x number of times.
{
cout << "Enter Node Name" << endl;
cin.get(name, MAX_SIZE, '\n');
cin.ignore(200, '\n');
addNode(name);
}
return 0
}
void addNode(name[])
{
if(!head){ // creates a first node,
head = new node;
head->next = NULL;
head->nodeName = "default node";
}
node * current = head;
node * newNode = new node;
newNode->name = name;//assign user inputed name.
newNode->next = NULL // set next pointer to null
while(current->next)
current = current->next; // traverse to the last node;
current->next = newNode; // connect the new node at the end.
}
Der Code funktioniert die Liste erstellen, aber die Namen aller Knoten sind gleich, ganz zuletzt durch den Benutzer eingegeben char-Array. Irgendwelche Vorschläge?
Sie müssen eine Kopie des Namens in addNode erstellen. Am einfachsten ist es, knotenname zu einem std :: string zu machen – pm100
Alternativ können Sie 'char * name = new char [MAX_SIZE]' * innerhalb * Ihrer Schleife verschieben. Ehrlich gesagt, ist die Verwendung von "std :: string" in der Tat der richtige Ansatz. – WhozCraig