1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

[C] Char Array mittels Pointer in Funktion übergeben und return Wert zurück geben

Discussion in 'Programmieren' started by raven16, Nov 12, 2013.

Thread Status:
Not open for further replies.
  1. raven16

    raven16 Byte

    Hallo,

    da ich über die Suche noch nicht wirklich leichte Beispiele finden konnte, anhand denen ich die Funktion von Pointern in meinem Anwendungsfall verstehen konnte, möchte ich meinen Beitrag doch nochmal explizit posten:
    PHP:

    /*
     * Funktion, die die Texteingabe umdreht und zurück gibt
     */
    charreverseText(chartext)
    {
        
    int i=0,txtlen;
        
    txtlen strlen(text);
        while(
    txtlen>=0)
        {
            
    text[i] = text[txtlen];
            
    txtlen--;
            
    i++;
        }
        return 
    text;
    }

    void aufgabe1()
    {
        
    //Variablendeklaration
        
    char eingabe[BUFFERSIZE];

        
    //Programmablauf
        
    puts("Aufgabe 1: Umgang mit Vektoren");
        
    puts("");
        
    puts("Geben Sie einen Text ein:");
        
    fflush(stdout);
        
    fgets(eingabesizeof(eingabe),stdin);
        
    puts("-------------------------------");
        
    puts("Rückwärts gelesen ist der Text:");
        
    printf("%s"reverseText(eingabe));
    }
    Irgendwie verstehe ich bei C das ganze System noch nicht so richtig, wie das mit den Pointern funktioniert und was dort passiert. Ich möchte ein Char-Array an eine Funktion übergeben und direkt ausgeben im printf-Befehl. Ich weiß nicht, ob ich die Übergabe mit den Pointern so richtig gemacht habe und wie ich das am besten testen kann, ob meine Funktion richtig ist.

    Im Moment hat der Compiler nichts an dem Quellcode auszusetzen, aber ich bekomme eine leere Ausgabe.

    Danke :)
     
  2. kazhar

    kazhar Viertel Gigabyte

    das liegt daran, dass du zum einen den string nicht richtig "umdrehst" (probier das ganze mal mit papier und bleistift) und zum anderen, dass du das string-ende-zeichen #0 mit "umdrehst"
     
  3. raven16

    raven16 Byte

    Danke, das ist mir gestern auch noch aufgefallen, dass ich das \0-Byte direkt an den Anfang schiebe und damit direkt den String abschließe und hab das tatsächlich mal aufgemalt. Wenn ich die Umdreh-Funktion weglasse und nur das Array einfach wieder mit return zurück liefere, dann gibt der meine Eingabe auch wieder aus.

    Mich würde eher noch interessieren, was jetzt genau in dieser Zeile passiert:
    PHP:
    charreverseText(chartext)
    Was machen genau die Sternchen?
    Bewirkt dies, dass hier die Adresse, wo sich das Array im Speicher befindet übergeben wird und dort geändert wird?
    Muss ich daher immer dann *Variable machen, wenn ich die Adresse an der Stelle des Speichers ändern möchte. Das ist mir irgendwie noch nicht ganz so logisch verständlich, was da genau passiert.

    Bringt ja nichts, wenn ich das einfach woanders kopiert habe, wann ich wo die Sternchen setzen muss, aber es selbst noch nicht verstanden habe :D

    Laut der Theorie habe ich die Funktion reverseText mal etwas geändert:
    PHP:
    charreverseText(chartext)
    {
        
    charreverse[strlen(text)];
        
    int i=0,txtlen;
        
    txtlen strlen(text);
        while(
    txtlen->= 0)
        {
            *
    reverse[i] = text[txtlen];
            
    txtlen--;
            
    i++;
        }
        *
    reverse[i] = '\0';
        return *
    reverse;
    }
    Da habe ich aber jetzt die Fehlermeldung beim return-Statement: "return makes pointer from integer without a cast"
    Wenn ich das versuche zu übersetzen, dann heißt das ja, dass er versucht eine Speicherstelle zurück zu geben, die nicht belegt ist.
     
    Last edited: Nov 13, 2013
  4. kazhar

    kazhar Viertel Gigabyte

    das ist die funktionsdefiniton von deiner funktion

    auf deutsch könnte man das so umschreiben:
    nimm einen zeiger auf ein zeichen, mach was damit und gieb einen zeiger auf ein zeichen zurück.

    wobei man wissen muss, dass in c/c++ ein "zeiger auf ein zeichen" eigentlich ein zeiger auf eine zeichenfolge ist und der zeiger zeigt auf das erste zeichen.

    die sagen, dass du einen zeiger auf den angegebenen datentyp haben willst.
    das kann wie in deinem fall ein zeichen oder auch auch z.b. void* sein; das ist ein untypisierter zeiger auf "etwas unbekanntes".




    edit: ach ja vergessen; dein quelltext...
    > *reverse = text[txtlen];
    es wundert mich dass der compiler das nimmt. du willst den zeiger auf das i. zeichen in string reverse setzen. rein logisch sollte das nciht gehen; ich bin aber in c/c++ zu wenig drinnen, um zu wissen ob das (auf irgend eine krumme weise) geht...
    analog das hier:
    > *reverse = '\0';
     
    Last edited: Nov 13, 2013
Thread Status:
Not open for further replies.

Share This Page