2 Probleme mit einer Funktion(bleibt "stecken" und produziert Compiler Warnung)



  • Hi,
    ich hab jetzt hier mal ein Funktion die aber ned so will wie ich das gerne möchte:

    char * make_send_pg_header(int msg_len, PACKAGE_FLAG flag, char *extension)
    {
        char *header = NULL;
    
        int digit_counter = 1;
    
        int tmp = msg_len;
        int header_len = 0;
    
        while((tmp = tmp / 10) != 0)
        {
            digit_counter++;
        }
    
        if(flag == PF_FILE)
        {
            header_len += strlen(extension);
            header_len += 1;    //--> for the second seperator look into the doc.
        }
        //printf("nach schleife\n");
        header_len += digit_counter;
        header_len += 3;        //--> for the seperator, the flag and the end-seperator '-'
    
        header = (char *) malloc(header_len);
        if(header != NULL)
        {
            if(flag == PF_FILE)
                sprintf(header, "%i_%c_%s-",msg_len, flag, extension);
    
            else
                sprintf(header, "%i_%c-",msg_len, flag);
    
        }
    
        return header;
    }
    

    Mein problem ist jetzt:
    Wenn ich den der Funktion einmal "printf()" schreiben funktionierts wunderbar aber sobald ich das draußen lass passiert nicht wenn ich das programm starte und des schließ sich nach einiger zeit wieder!

    main:

    int main(int argc, char *argv[])
    {
        char *test = NULL;
    
        test = make_send_pg_header(12345, PF_ORDER, NULL);
        printf("HEADER test 1: *%s*\n", test);
        free(test);
    
        test = make_send_pg_header(5478, PF_FILE, ".txt");
        printf("HEADER test 2: *%s*\n", test);
        free(test);
    
        return 0;
    }
    

    Nur warum ist das so?? 😕

    Jetzt hab ich noch ein 2tes Problem:

    Warning: assignment makes pointer from integer without a cast
    

    Bei:

    test = make_send_pg_header(5478, PF_FILE, ".txt");
    

    Aber test ist ja ein char *
    und Deklaration von make... ist:

    char * make_send_pg_header(int msg_len, PACKAGE_FLAG flag, char *extension);
    

    wo ist jetzt da das Problem??

    Ich danke euch schon mal
    👍

    MFG Ich



  • Zum ersten: Ich hab' jetzt nicht exakt nachgezählt, aber anscheinend hast du keinen Platz für die Stringende-Marke bereitgestellt (die braucht auch ein zusätzliches Byte).

    Was die Warnung angeht: Wo hast du denn den Prototyp der Funktion untergebracht? Hoffentlich vor der main()-Funktion.
    (wenn nicht, legt C automatisch einen Prototyp "int make_send_pg_header()" an, der nicht ganz zur korrekten Definition passt)



  • Des mit dem '\0' ist mir gerade auch aufgefallen 🙄
    und jetzt geht auch die ausgabe :D;

    Und den header wo der prototyp drin ist hab ich gar nicht eingebunden
    🙄

    Naja wenn ich ein bissle besser aufgepasst hätte müsste man da nicht fragen
    😉

    Auf jeden Fall danke ich
    "Danke"

    Und wünsch noch nen schönen Tag
    👍


Anmelden zum Antworten