char* als Rückgabewerte Probleme

Diskutiere char* als Rückgabewerte Probleme im C/C++ Forum; Nabend, steh bei C auf'm Schlauch und komme nicht weiter... int main ( void ) { char *original_path = getWorkspace(); return...

  1. Zel2491
    Zel2491 Mitglied
    Nabend,

    steh bei C auf'm Schlauch und komme nicht weiter...

    Code (Java):
    int main ( void )
    {
        char *original_path = getWorkspace();
     
        return EXIT_SUCCESS;

    }
    char* getWorkspace()
    {
        char puffer[200];

        return getcwd(puffer, sizeof(puffer)) != NULL ? getcwd(puffer, sizeof(puffer)) : "unknown";

    }
     
    erzeugt eine total komische Ausgabe... lasse ich mir das Ergebnis der Funktion getcwd(...) IN der getWorkspace() anzeigen, gibt er mir den richtigen Workspace zurück, indem ich mich grad befinde.

    Rufe ich dann allerdings in der main
    Code (Java):
    printf("PATH: %s\n", original_path);
     
    auf, so ist das Ergebnis Stückwerk...

    Als Ergebnis gibt er mir n paar Zeichen zurück... wie z.B. Pfeil nach Unten, Weiblichkeitssymbol, Copyright... Als Symbol eben, je nach dem welche Eingabe ich getätigt hab...

    Ich weiß, dass ich was mit den Zeigern verbocke... nur was genau?

    Ein bisschen Hilfe wäre nett...^^

    Gruß Zel ;-)
     
    Zuletzt bearbeitet: 11. Dez. 2014
  2. Vielleicht hilft dir dieser Kurs hier weiter --> (hier klicken)
  3. Tucan
    Tucan Mitglied
    Es liegt an der Zeichenkodierung der Konsole, vermute ich mal. Dieses Problem gibt es in Java und in C...

    Die Konsole hat zwar eine 8-Bit OEM-Kodierung, C unterstützt die aber(genau wie Java) nur halbherzig, weshalb nur ASCII geht, es sei denn, du weißt viel über die beteiligten Zeichencodes und kannst die ausgeben. Unter Java gibt es dazu die Hilfsklasse Console, wie das in C aussieht (?)...

    Du musst außerdem beim Umwandeln beachten, dass manchmal Bits abgeschnitten werden, ich glaube aber das es an der Konsole liegt... Du musst dann die Zeichencodes besorgen und diese ausgeben...

    Ich hoffe, ich habe dir geholfen,
    Grüße, Tucan :-D
     
  4. Dompteur
    Dompteur Aktives Mitglied
    Die Variable “puffer” wird beim Aufruf der Funktion am Stack angelegt. Solange du dich in der Funktion befindest, ist alles in Ordnung. Beim Verlassen der Funktion wird der Stack wieder freigegeben. Der Pointer, der von der Funktion zurückgegeben wird, zeigt nun auf einen Speicher, der wieder als frei markiert ist. Es ist nun mehr oder weniger Zufall, wer diesen Speicher wieder nutzt und dann irgendetwas reinschreibt.

    Du kannst das Problem auf verschiedene Arten lösen:
    * Du übergibt der Funktion einen Pointer auf einen Speicher. Die Funktion befüllt den Speicher dann.
    * Du reserviert in der Funktion Speicher am Heap und gibst den Pointer darauf zurück. Diesen Speicher musst du aber irgendwann wieder freigeben ! Dazu gibt es unter anderem die Funktionen : malloc und free.
     
    Blender3D gefällt das.
  5. Blender3D
    Blender3D Aktives Mitglied
    Hier eine Möglichkeit mit getcwd();

    As an extension to the POSIX.1-2001 standard, glibc's getcwd()
    allocates the buffer dynamically using malloc(3) if buf is NULL. In
    this case, the allocated buffer has the length size unless size is
    zero, when buf is allocated as big as necessary. The caller should
    free(3) the returned buffer.
     
Die Seite wird geladen...

char* als Rückgabewerte Probleme - Ähnliche Themen

Daten von einem (char*)Socket einlesen.
Daten von einem (char*)Socket einlesen. im Forum Java Basics - Anfänger-Themen
Erneut eine Frage zu Rückgabewerten
Erneut eine Frage zu Rückgabewerten im Forum Java Basics - Anfänger-Themen
Dynamische Rückgabewerte
Dynamische Rückgabewerte im Forum Allgemeine Java-Themen
Methoden mit 2 Rückgabewerten!?
Methoden mit 2 Rückgabewerten!? im Forum Java Basics - Anfänger-Themen
Kovariante Rückgabewerte mit ArrayList
Kovariante Rückgabewerte mit ArrayList im Forum Allgemeine Java-Themen
Thema: char* als Rückgabewerte Probleme