Stringrückgabe in Funktionen



  • Hallo Leute,
    ich habe eine Funktion geschrieben, die es ermöglicht, einen String (um eine bestimmte Anzahl an Zeichen) zu kürzen...
    Dabei stoße ich auf folgendes Problem:
    Den bearbeiteten String möchte ich nun mit 'return()' an die main-Funktion zurückgeben, doch dass klappt nicht...
    (ich erhalte Fehlermeldungen wegen invalid Poiter und ähliches,==>Das Programm stürzt ab...)
    Könnt ihr mir weiterhelfen?


  • Mod

    Knerbel schrieb:

    Den bearbeiteten String möchte ich nun mit 'return()' an die main-Funktion zurückgeben, doch dass klappt nicht...

    Wie funktionieren denn Zeichenketten in C? Wenn du diese Frage beantworten kannst (und das solltest du, wenn du mit Zeichenketten in C hantierst), dann weißt du auch, warum das vielleicht keine so tolle Idee ist.



  • Geht es etwas konkreter?
    Bisher habe ich dafür eine globale Variable deklariert, und sie dann in der main-Funktion abgerufen. Ich möchte nur wissen, ob es auch einen eleganteren Weg gibt, und wenn ja, welchen...



  • Knerbel schrieb:

    Geht es etwas konkreter?

    Das kann man nur zurückgeben. Wo ist dein Source von der funktion?



  • #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    #include <string.h>

    char GekurzterText[512]="";

    int Stringkurzen(char Text[],int AnzahlKurzungen)
    {
    FILE *f;
    char Zeichen[2];
    int Lange=strlen(Text);
    int Ausgabe;
    if(AnzahlKurzungen>Lange) AnzahlKurzungen=Lange;
    strcpy(GekurzterText,"");
    f=fopen("C:\\Programme\\Knerbliversum1.00\\Stringkurzen().txt","w");
    fputs(Text,f);
    fclose(f);
    f=fopen("C:\\Programme\\Knerbliversum1.00\\Stringkurzen().txt","r");
    while(Lange!=AnzahlKurzungen)
    {
    Ausgabe=fgetc(f);
    sprintf(Zeichen,"%c",Ausgabe);
    strcat(GekurzterText,Zeichen);
    strcpy(Zeichen,"");
    Lange--;
    }
    }

    int main(int argc, char *argv[])
    {
    Stringkurzen("Das ist der Text, der gekurzt werden soll",8);
    printf("%s\n",GekurzterText);
    system("PAUSE");
    return 0;
    }



  • Knerbel schrieb:

    Bisher habe ich dafür eine globale Variable deklariert, und sie dann in der main-Funktion abgerufen.

    keine gute Idee.

    Knerbel schrieb:

    Ich möchte nur wissen, ob es auch einen eleganteren Weg gibt,

    Ja.

    Knerbel schrieb:

    und wenn ja, welchen...

    Wenn du ein Buch über C hast, steht das da drin.
    Wenn du kein Buch hast, wird es schwierig, weil du die Grundlagen nicht kennst.
    Zeig deinen Code, dann können wir sagen woran das liegt.

    char* set_stringlength_to_zero(char text[]) 
    { x[0]= '\0';
    
      return text;
    }
    

    oder

    char* set_stringlength_to_zero(char *text) 
    { *x = 0;
    
      return text;
    }
    

    ^(Die Funktionen sind völlig identisch. Der Compiler erzeugt denselben Code. Du kannst die (jeweils entsprechenden) Zeilen gegeneinander austauschen.)^

    Oder rufst du deine Funktion mit einem Stringliteral auf?

    char text[] = "Hallo Welt";
    set_stringlength_to_zero(text); // geht
    set_stringlength_to_zero("Hallo Welt"); // geht nicht
    


  • Nutze bitte die Codetags:

    // Achtung: grosses Verbesserungspotential
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    #include <string.h>
    
    char GekurzterText[512]="";     // global?
    
    int Stringkurzen(char Text[],int AnzahlKurzungen)   // die Kommentare in dieser Funktion reichen nicht - Funktion neu erstellen
    {
        FILE *f;
        char Zeichen[2];    // ??
        int Lange=strlen(Text);
        int Ausgabe;
        if(AnzahlKurzungen>Lange)
            AnzahlKurzungen=Lange;
        strcpy(GekurzterText,"");
        f=fopen("C:\\Programme\\Knerbliversum1.00\\Stringkurzen().txt","w");    // f = fopen(.. <== f prüfen
        fputs(Text,f);
        fclose(f);
        f=fopen("C:\\Programme\\Knerbliversum1.00\\Stringkurzen().txt","r");    // f <== prüfen
        while(Lange!=AnzahlKurzungen)
        {
            Ausgabe=fgetc(f);
            sprintf(Zeichen,"%c",Ausgabe);  // ??
            strcat(GekurzterText,Zeichen);
            strcpy(Zeichen,"");
            Lange--;
        }   // fclose??
    }   // return??
    
    int main(int argc, char *argv[])
    {
        Stringkurzen("Das ist der Text, der gekurzt werden soll",8);
        printf("%s\n",GekurzterText);
        system("PAUSE");    // siehe FAQ hier im Forum
        return 0;   // kann entfallen solange nur 0 zurück soll. 
    }
    

    Absolute Pfadangaben sind nicht mein Ding. Sind da keine relativen Pfadangaben möglich? Wenigstens, wenn du hier Quelltext zeigst.

    Wenn du eine Datei zum lesen geöffnet hast, sollte auch nur lesen möglich sein.
    Zeichen aus Datei löschen bedeutet irgend etwas in die Datei schreiben!

    Möglichst Rückgabewerte auswerten bei fopen und den string-Funktionen.



  • Schreib deine Funktion so ähnlich wie strcpy.
    Du übergibst den Speicher für das Ziel und für die Quelle an die Funktion.


Anmelden zum Antworten