Problem mit Funktionsaufruf - C

  • Halli Hallo!


    Ich hab hier folgendes Problem:
    aus dem Main-Funktion möchte ich eine Funktion aufrufen, die in meiner Header-Datei steht.
    Allerdings bekomm ich beim kompilieren einen Linker-Error, das er die Funktion funktion1 nicht finden kann.
    Hat jemand ne Idee, woran das liegt? Ich bin im Moment ziemlich ratlos. Meiner Meinung nach hab ich alles richtig.


    Hier mal der Quelltext:



    Hier die Header-Datei:



    ______
    Thomas

  • Hi,
    so auf anhieb sehe ich jetzt keinen offensichtlichen Fehler.


    Funktioniert es, wenn Du die includierte datei direkt in den quelltext kopierst?


    cu
    XlF

  • Hi!


    Das gepostete Problem hab ich mittlererweile selber gelöst.


    Aber nun stehe ich schon wieder vor dem nächsten Problem:
    ich möchte eine eingegebenen Namen in eine Struktur schreiben. Das Ganze versuche ich so:

    Code
    printf("Name: ");
    gets(buffer);
    buffer[20]='\0';
    strcpy(pers->name, buffer);


    Wenn ich das Programm dann aber ausführe, erzählt der irgendwas von Access Violation. Ich kann aber beim besten Willen keinen Fehler entdecken. Hast Du ne Idee?


    ______
    Thomas

  • Hi,
    du hast mehrere moeglichkeiten, die davon abhaengen, wie pers definiert ist:
    1.

    Code
    typedef struct pers
    {
    ....
    char name[80];
    ....
    } pers;
    ....
    strcpy (pers->name, buffer);


    (der speicherbereich fuer name wird zusammen mit der instantiierung von pers mit vorgegebener laenge allokiert)


    2.


    (der speicherbereich muss haendisch in der richtigen laenge alloziert werden)


    cu
    XlF

  • Erstmal danke für Deine Hilfe.


    'pers' ist ein Zeiger auf eine Strukur namens daten

    Code
    struct daten
    {
    char name[20];
    //....
    }


    Bei mir trifft also Deine 1. Möglichkeit zu.


    Die Größe von buffer sollte also ausreichen. Ich steh grad wirklich auf dem Schlauch. Von der Theorie her sollte es ja klappen....:confused:


    Ratlose Grüße
    Thomas


  • Versuch mal ein & vor pers->name:


    strcpy(&(pers->name), buffer);


    strcpy erwartet 2 Zeiger und mit "pers->name" erhälst du glaube ich nicht die Adresse von name.

  • Hi,


    Zitat

    Original geschrieben von LJ
    Erstmal danke für Deine Hilfe.
    ...
    Die Größe von buffer sollte also ausreichen. Ich steh grad wirklich auf dem Schlauch. Von der Theorie her sollte es ja klappen....:confused:


    Ratlose Grüße
    Thomas


    - wie ist der pointer buffer deklariert/alloziert?
    - wie ist die struktur daten instanziiert/alloziert?


    cu
    XlF

  • Zitat

    Original geschrieben von XlF42
    - wie ist der pointer buffer deklariert/alloziert?


    Hm, ich seh grad, 'buffer' is gar kein Pointer. Der ist einfach als

    Code
    char buffer[81];


    definiert. Sollte da das Problem liegen?


    Zitat

    Original geschrieben von XlF42
    - wie ist die struktur daten instanziiert/alloziert?


    Code
    struct daten *pers;


    Zitat

    Original geschrieben von Z'ha'dum
    Versuch mal ein & vor pers->name:


    strcpy(&(pers->name), buffer);


    strcpy erwartet 2 Zeiger und mit "pers->name" erhälst du glaube ich nicht die Adresse von name.


    Funktioniert leider auch nicht. Es tritt immer noch eine Access Violation auf.


    Ich weiß hier echt nimmer weiter....



    ______
    Thomas

  • Hi,


    Zitat

    Original geschrieben von LJ
    Hm, ich seh grad, 'buffer' is gar kein Pointer. Der ist einfach als

    Code
    char buffer[81];


    definiert. Sollte da das Problem liegen?


    Fuer C ist das trotzdem ein Pointer, fuer den halt auch gleich 81 bytes reserveirt werden, und dessen Wert Du nicht veraendern darfst.



    Du musst entweder

    Code
    struct daten pers;


    nehmen und dann

    Code
    strcpy (pers.name, buffer);


    oder

    Code
    struct daten *pers;
    ...
    pers = (struct pers*)malloc (sizeof(struct pers));
    ...


    machen.


    cu
    XlF


  • Hi,


    so funktioniert es bei mir. Ich muss aber statt pers.name pers->name verwenden.
    Tausend Dank! :top:
    Beim nächsten Problem werd ich mich sicher wieder melden ;)


    ______
    Thomas

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!