Frage zur Rückgabe eines Zeigers



  • Hallo,
    ich habe eine Frage zu der Rückgabe von char Pointer. Der untere Code wäre ziemlich tödlich, nech?

    char* foo()
    {
     char test[50]="test123";
     ...
     return test;
    } 
    

    Was ist Best Practice? In der Methode foo ein dynamischen Speicher mittels malloc anlegen und den zurückgeben? Würde eine schnelle Variante bevorzugen.

    Oder so?

    #include <stdio.h>
    #include <string.h>
    void foo(char* array, const int length)
    {
        //Habe einfachhalber length nicht beruechsichtigt 
        strcpy(array,"test123");
    }
    
    int main()
    {
        const int LENGTH=255;
        char s[LENGTH];
        foo(s,LENGTH);
        printf("%s",s);
    }
    


  • @asd1 oder so!



  • const int
    

    ist sinnfrei, weil es Falsches suggeriert.
    Es ist sinnfrei, eine Stringkonstante innerhalb der Funktion so zu verwenden wie du es zeigst.

    #include <stdio.h>
    #include <string.h>
    
    char *foo(char *string,int length,const char *new)
    {
        sprintf(string,"%.*s",length,new);
        return string;
    }
    
    int main()
    {
        const char *s=foo((char[255]){0},255,"test123");
        puts(s);
    
        return 0;
    }
    


  • @Wutz sagte in Frage zur Rückgabe eines Zeigers:

    const int
    

    ist sinnfrei, weil es Falsches suggeriert.
    Es ist sinnfrei, eine Stringkonstante innerhalb der Funktion so zu verwenden wie du es zeigst.

    #include <stdio.h>
    #include <string.h>
    
    char *foo(char *string,int length,const char *new)
    {
        sprintf(string,"%.*s",length,new);
        return string;
    }
    
    int main()
    {
        const char *s=foo((char[255]){0},255,"test123");
        puts(s);
    
        return 0;
    }
    

    Und das ist in C Best-Practice? Finde ich ehrlich gesagt fast noch verwirrender als die Variante des TE...


Log in to reply