C++ array mit verketteten Listen

Mark.G.

Ensign
Registriert
Okt. 2008
Beiträge
249
Hallo,
folgendes "Problem", ich hab einen array und möchte, dass jedes element des arrays auf eine verkettete Liste zeigt.
Hier mal mein code:

Code:
#include <iostream>
#include <string.h>
#include <stdlib.h>

// Struct für ein Listenelement
struct userlist 
{
        char username[256]; // Daten die pro Element gespeichert werden sollen
        char emailadresse[256]; // Daten die pro Element gespeichert werden sollen
        struct userlist *next; // Zeiger aufs nächste Element
};

// Struct für die Liste selbst
struct list
{
        struct userlist *start; 	// Zeiger aus erste Listenelement
};

//funktion
int add (struct userlist hashtabelle[], char name[], char emailadd[])
{
        struct userlist *p;
        struct userlist *buffer;
        struct list *l = initList(); // Erstellt die Liste
        p = initElement(name,emailadd); 
        hashtabelle[hashnumber] = *p;
        addElementToList(l, p);
        printf("%s\n",p->username);

        *buffer = hashtabelle[hashnumber]; // hier will ich testen ob die adresse von der liste p in  hashtabelle[hashnumber] steht, leider funkt das nicht
        printf("%s",buffer->username); //geht nicht da übergabe ned geht

        return 1;
}

int main(int argc, char *argv[])
{
        struct userlist hashtabelle[2003]; //!!!!!!!!!!! stimmt das??? !!!!!!!!!!!
        add(hashtabelle, argv[2], argv[3]); //ruft funktion auf
        return 0;
}

Das hier geht leider nicht oder macht nicht was es soll.
Code:
*buffer = hashtabelle[hashnumber];

wobei wenn diese zeile ned passt, dann passt diese auch ned:
Code:
hashtabelle[hashnumber] = *p;

ich hab jedoch folgendes getestet:
Code:
buffer= p; //hab mich vorhin vertan, so gehts

Wer kann mir sagen wie ich den array hashtabelle richtig definieren muss damit ich in zb. "hashtabelle[2]" den pointer auf die liste speichern kann. Code sagt mehr als 1000 worte.
dankö
Ergänzung ()

ok ich sollte es haben.

Code:
buffer = &hashtabelle[hashnumber];
 
Zuletzt bearbeitet:
ja in meinem ganzen prog stehen noch einige c++ sachen die hab ich ned gepostet deswegen hab ich c++ genommen, aber bei dem code hast du recht, is alles c.
 
@wayne_757:
"#include <iostream>"
also mein C-Compiler meckert bei diesem Include aber...
 
struct userlist hashtabelle[2003]; //!!!!!!!!!!! stimmt das??? !!!!!!!!!!!

Meiner Meinung nach sollte dies nicht so dort stehen. Denn so erstellst du nur ein Feld von Listenelementen. Du möchtest aber eine Liste erstellen.
Also:
Code:
struct list hashtable;

Dazu kommt meines erachtens noch, dass du dynamische Speicherverwaltung brauchst um ein neues Listenelement erstellen, bzw. ein vorhandenes löschen zu können.

Ich bin ein wenig eingerostet, was verkette Listen angeht. Ich hoffe ich konnte dir ein klein wenig helfen.
 
FlyingEagle schrieb:
Dazu kommt meines erachtens noch, dass du dynamische Speicherverwaltung brauchst um ein neues Listenelement erstellen, bzw. ein vorhandenes löschen zu können.

jo die hab ich eh, da sie aber nicht relevant war, hab ich den code ned gepostet.


ich hab jetzt ein anderes "problem", ich möchte einen string in einen array kopieren.

Code:
#include <sstream>
#include <string>

int main()
{
    string str;
    char array[256];
    char as[256];
    int x=0;

    getline(cin, str); /einlesen
    
    /*Teilt string in 3 string*/
    std::istringstream iss(str);
    std::string arg1, arg2, arg3;
    iss >> arg1 >> arg2 >> arg3;


    strcpy(as,arg1); // das geht nicht


    while (arg1[x]!= '\0') // das geht zwar, aber leider werden zu viele zeichen kopiert (auch ungültige)
    {
        array[x]=arg1[x];
        x++;
    }

    return 0;
}
Ergänzung ()

Lösung:

Code:
 strcpy (as, arg1.c_str());
 
Zuletzt bearbeitet:
also mein C-Compiler meckert bei diesem Include aber...

Ändert trotzdem nichts daran das das C Code ist.
@Mark.G. schau dir mal die STL an, da findest du mit sicherheit dass, was du brauchst.
 
Ich verstehe nicht warum du zwischen C- und C++-Code so dermaßen unterscheidest... Weil das hat mit dem Thema oder Lösung relativ gar nichts zu tun...
Nur weil der Code genauso von einem C-Compiler geschluckt wird, heißt das doch nicht, dass es sich nicht um C++-Code handelt...

@Mark.G.: strcpy bitte nie nehmen, immer strncpy...
 
@1668mib
warum ist strcpy schlecht oO?
 
Wieso nutzst du nicht die Befehlsreferenzen, um zu wissen, was eine Funktion macht, anstatt irgendwelche eigene Theorien aufzustellen?

num gibt an, wieviele Zeichen destination aufnehmen kann...

Was ist, wenn destination nur 10 Zeichen aufnehmen kann, aber dein Quellstring 100 hat? Das ist strcpy egal... dem Programm allerdings nicht.
 
Zurück
Oben