Pointer Problem



  • Hallo liebes Forum,

    sicherlich eine stark frequentierte Frage, doch ähnliche Fehler konnte ich nicht ergooglen. Folgender Code:

    char* createPath(char *foldername, char *filename) {
    
       char *pathname;
       /* Char Array wird gefüllt und zurückgegeben */
       ...
    
       return pathname;
    }
    
    void put_file(char *foldername, char *filename) {
    
       char pathname[100];
    
       pathname = createPath(foldername, filename);
       /* Weitere Aktionen */
    }
    
    void main() {
    
       put_file("Folder", "file.txt");
    
    }
    

    Im Grunde soll hier ein Pfadname erstellt werden, der dann zu einem Pfad im Dateisystem umgesetzt werden soll. Aber dank folgender Fehlermeldung kommt es soweit erst gar nicht:

    testing.c: In Funktion »put_file«:
    testing.c:107:13: Fehler: unverträgliche Typen bei Zuweisung an Typ »char[100]« von Typ »int«
    

    Ich schätze mal, dass die erwarteten Argumente in den Funktionssignaturen nicht richtig deklariert sind. Jedes Ausprobieren ist jedoch bisher ohne Erfolg geblieben. Hoffe, ihr könnt mir helfen! Vielen Dank schon einmal!


  • Mod

    Arrays haben keine Zuweisungssemantik. Grundlagen von Zeichenkettenverarbeitung in C ansehen, du wirst sehr wahrscheinlich die verschiedenen Funktionen aus string.h benutzen wollen.

    Der Kommentar in Zeile 4 lässt mir Angst und Bange werden, wenn ich an den Code denke, den du uns an der Stelle nicht zeigst. Sehr wahrscheinlich erzeugst du entweder Speicherlöcher und/oder Verweise auf längst zerstörte Objekte. Einen Zeiger aus einer Funktion zurück zu geben ist jedenfalls fast nie richtig.

    Höchstwahrscheinlich willst du eine Funktion a la:

    void createPath(const char *foldername, const char *filename, char *return_value);
    

    Die du dann wie folgt aufrufst:

    char pathname[100];
    createPath(foldername, filename, pathname);
    

    Aber wirklich: Guck dir dringend erst einmal an, wie Arrays und Zeichenketten in C genau funktionieren. Nicht von anderen Sprachen auf C schließen. Arrays sind in C für Anfänger leider recht schwierig, da sie sich anders verhalten als "normale" Datentypen. Und wenn man etwas falsch macht, knallt's.

    P.S.: Ausprobieren von unterschiedlichen Schreibweisen ist in C auch keine gute Strategie, um Fehler zu beheben. Sehr viel Code ist an sich gültig (d.h. übersetzt), obwohl er absoluter Unsinn ist. Dabei unterscheiden sich sinnvoll und Unsinn oft nur durch ein einziges Zeichen. Daher musst du immer von jedem(!) Zeichen in deinem Programm genau wissen, was es macht und warum du es setzt.



  • Ja, die Grundlegen sollten sitzen. Muss ich nochmal ran! Der Hinweis half mir jedenfalls wunderbar. Vielen Dank dafür!


Anmelden zum Antworten