Anfänger braucht Hilfe mit Char-Array / getenv



  • Hallo erstmal,

    ich bin der Dennis und hab ein Problem. 😃

    Eigentlich habe ich ja keine Verständnisprobleme, wenn es um Zeiger und der Gleichen geht, doch dieses mal stehe ich wie der Ochs vom Berg. Mit

    char *psWinDir = getenv("windir");

    erzeuge ich einen Zeiger auf ein Char-Array, welches das Windowsverzeichnis enthält. Das Problem, dass ich ich nun habe ist, wie bringe ich DJGPP dazu, den Inhalt des Arrays in ein anderes Array zu kopieren.

    Obwohl das Einsteigerbuch, welches ich zu Rate ziehe, Sachen wie

    char Text[10], Text1[10];
    Text[] = "Test";
    Text[] = Text1[];

    als gültig erklärt, funktioniert das ganze bei mir nur, mit Funktionen wie strcpy oder strcat. Soweit auch gar kein Problem, aber ich bekomme einfach nicht den Inahlt der Systemvariablen in ein eigenes Char-Array. 😕

    Sämtliche Versuche, die in die Richtung

    char *psWinDir = getenv("windir");
    char sWinDir[256];
    strcpy(sWinDir, psWinDir);

    gingen (mit allen Kombinationen von & und * Operatoren) gingen schief. Ich bin mir sicher, dass ich irgend eine blöde Kleinigkeit übersehe. Vielleicht könnte mir jemand einen Dreizeiler posten und erklären, wo mein Fehler liegt. Die hier gepostete Version wird anstandslos compiliert und gelinkt. Allerdings steigt das Programm an der besagten Stelle aus.

    Um gleich der Frage uas dem Weg zu gehen, warum ich ein eigenes Array verwenden will: Mittels strcat soll das neue Array um einen Dateinamen erweitert werden, so dass ich versch. Dateien im Windowsverzeichnis bearbeiten kann. Das klappt zum Glück auch. 🙂

    Vielen Dank und Gruß,
    Dennis



  • Übrigens würde mir

    char *psWinDir = getenv("windir");
    char sWinDir[256];
    strcpy(sWinDir, *psWinDir);

    logischer erscheinen, allerdings meint der Compiler dann, dass ich aus einer Integervariablen einen POinter machen wollte ohne eine Typumwandlung anzuwenden. Das Programm steigt trotzdem aus...



  • Dennis Schulmeister schrieb:

    Mit

    char *psWinDir = getenv("windir");

    erzeuge ich einen Zeiger auf ein Char-Array, welches das Windowsverzeichnis enthält.

    Das funktioniert? Dann setz ich das jetzt mal voraus, dass da kein Nullpointer rauskommt (das würde bedeuten, dass windir nicht definiert ist).

    Obwohl das Einsteigerbuch, welches ich zu Rate ziehe, Sachen wie

    char Text[10], Text1[10];
    Text[] = "Test";
    Text[] = Text1[];

    als gültig erklärt,

    *grusel* tu das Buch weg 🙂 Das ist grober Unfug.

    Sämtliche Versuche, die in die Richtung

    char *psWinDir = getenv("windir");
    char sWinDir[256];
    strcpy(sWinDir, psWinDir);

    gingen (mit allen Kombinationen von & und * Operatoren) gingen schief.

    Das müßte so wie's dasteht schon funktionieren. IMHO liegts daran, dass getenv dir nen Nullpointer gibt, aber was weiß ich schon ...

    EDIT: Auf dein zweites Posting: Bist du sicher, dass du kein Verständnisproblem bzgl. Zeigern hast?



  • Naja, sagen wir mal so, bisher hat's mit den Zeigern immer geklappt. Auf die Idee mit dem * bin ich erst hinterher gekommen, nachdem nichts funktioniert hat. 🙄

    'n bisserls unlogisch ist es ja schon, da die Funktion sicher auch nur mit Speicheradressen arbeiten kann und nicht mit dem tatsächlichen Speicherinhalt.

    Du hast recht, eine Nullzeiger-Abfrage habe ich noch nicht drin. Allerdings muss ich mir dann einen anderen Weg suchen, das Windowsverzeichnis auszulesen...

    Danke erstmal.

    Gruß,
    Dennis


Anmelden zum Antworten