C Unterprogramm soll ein String ans Hauptprogramm zurückgeben



  • Wer kann mir helfen. Ich übergebe einen String an ein Unterprogramm. Folgendes Programm ruft dieses Unterprogramm auf.

    #include <stdio.h>

    struct konto
    {
    int ktnr;
    char name[30];
    char vname[30];
    char str[30];
    char plz[10];
    char ort[30];
    char land[30];
    };

    struct order
    {
    char artnr[10];
    char bez[30];
    float anzahl;
    struct konto kunde;
    };

    char clear_crlf(char array)
    {
    int i;
    for(i = 0; i < strlen(array); i++)
    {
    if (
    (array+i) == '\n')
    *(array+i) = 0;
    }
    return array
    }

    int main()
    {
    struct order o1;

    printf("Kundenprofil eingeben");
    printf("\nName ");
    fgets(o1.kunde.name,30,stdin);
    printf("%s",clear_crlf(o1.kunde.name));
    printf("Vorname ");
    fgets(o1.kunde.vname,30,stdin);
    printf("Strasse ");
    fgets(o1.kunde.str,30,stdin);
    printf("PLZ ");
    fgets(o1.kunde.plz,10,stdin);
    printf("Ort ");
    fgets(o1.kunde.ort,30,stdin);
    printf("Land ");
    fgets(o1.kunde.land,30,stdin);
    printf("\nOrder eingeben\nArtnr ");
    fgets(o1.artnr,10,stdin);
    printf("Artbez. ");
    fgets(o1.bez,30,stdin);
    printf("Anzahl ");
    scanf("%4.2f",&o1.anzahl);
    fflush(stdin);
    printf("\n\n");
    o1.kunde.ktnr = 1;
    return 0;
    }

    Ich übersetze das Programm und starte es wie unten angegeben, es kommt eine Warnung und das Programm stützt mit der Speicherzugriffsfehlermeldung ab.

    frank@linux1:~/C++/übungen> cc -o struct.exe struct.c
    struct.c: In function `clear_crlf':
    struct.c:30: warning: return makes integer from pointer without a cast
    frank@linux1:~/C++/übungen> struct.exe
    Kundenprofil eingeben
    Name Rumpf
    Speicherzugriffsfehler

    Wie übergebe ich das Array aus meinem Unterprogramm in mein main() -Programm?



  • char clear_crlf(char *array) // Sollte char * zurück geben und nicht char
    {
      int i;
      for(i = 0; i < strlen(array); i++)
      {
        if (*(array+i) == '\n')
        *(array+i) = 0;
      }
      return array
    }
    

    Edit: Bitte benutze die Code/Cpp Tags. Danke



  • Vielen dank
    Es funktioniert.
    Es ist mir jetzt klar. Ich hoffe ich habe es richtig verstanden. Die Funktion gibt nicht einen char-Wert zurüch sondern den Zeiger auf den Array.

    MfG

    Frank Rumpf



  • In der Zeile:

    for(i = 0; i < strlen(array); i++)
    

    gibts aber noch einen Fehler:

    [C++ Warning] strukturen.c(34): W8012 Comparing signed and unsigned values

    Was bedeutet, dies genau, denn wenn ich Namen eingebe bekomme ich bei diesem Programm Speicherfehlermeldung !



  • machste halt ein

    unsigned int i
    

    draus.

    unsigned heisst, das es keine vorzeichen gibt (eine länge kann ja eh nicht negativ sein)

    das muss natuerlich angegeben werden.

    vielleicht nochaml in die c/c++ buddelkiste gucken? 🙂



  • Ich habe das Programm mit dem C-Compiler übersetzt da ich mich derzeit mit ANSI C beschäftige und bekomme keinen Fehler angezeigt.
    Erfasst habe ich das Programm mit dem vi und mit cc -o text.exe test.c übersetzt und bekomme keinen Fehler. C++ und C sind zweich verschiedene Compiler.



  • Na klar sind das zwei verschiedene Sachen... Deinen letzten Satz verstehe ich jetzt nicht so richtig.


Anmelden zum Antworten