char array an Funktion



  • Hallo,

    vielleicht hat jemand einen Tipp für mich
    Mein Prototyp:

    int new_main(int, char *[]);
    

    Mein call:

    char	*t[1] ={"fuckup"};
    char    *tt[2];
    
    t[0] = "nr1";
    t[1] = "nr2";
    
    // OK
    new_main(23, t);
    
    // OK
    new_main(23, tt);
    
    // FAIL
    new_main(23, "fuckup");
    

    Gibt es eine Möglichkeit das auch new_main(23, "fuckup"); klappt?
    bzw. ist es vom code immer unschön so eine hilfsvariable "t" zu haben.

    Erste Idee: wrapper funktion aber vielleicht gibt es auch was schönes.

    Danke im Voraus



  • "fuckup" ist im Grunde ein

    const *char
    

    Bei einer Anpassung Deines Prototypen wäre natürlich die Folge, dass Du nicht so ohne Weiteres die übergebenen Bereiche von t bzw tt beschreiben könntest...

    Sagt mir zumindest meine spärlich vorhandene Erfahrung und mein grundlegend verfälschtes Verständnis für C ;o)



  • In C99 kann man

    new_main(23, (char const *[]){ "foo" });
    

    schreiben, wenn man das schöner findet. Allerdings beherrschen das bislang nicht alle verbreiteten Compiler, und Microsoft hat wohl auch keine Pläne, das zu ändern.

    Generell ist es übrigens mindestens sehr schlechter Stil, String-Literale in char* zu stopfen. Wenn du in den String nicht hineinschreiben willst, benutz char const *. Wenn du in den String hineinschreiben willst, funktioniert das mit String-Literalen eh nicht.



  • @PrettyP: Sternchen falsch gesetzt. Muss nach char hin. 😉



  • 314159265358979 schrieb:

    @PrettyP: Sternchen falsch gesetzt. Muss nach char hin. 😉

    Dankeschön 😉



  • seldon schrieb:

    Generell ist es übrigens mindestens sehr schlechter Stil, String-Literale in char* zu stopfen. Wenn du in den String nicht hineinschreiben willst, benutz char const *. Wenn du in den String hineinschreiben willst, funktioniert das mit String-Literalen eh nicht.

    Danke, jedoch frage ich mich wie ich im am schönsten so ein main clone zusammen baue.

    OK wie die Funktion ausschaut ist mir klar (genau wie die main). Wie ich auf dei Elemente zugreife, ist mir auch klar. Jedoch nicht genau wie die Daten Struktur ausschaut die übergeben wird. Also den argv[].



  • argv ist ein Array dessen Elemente Zeiger auf char sind.

    Du hast einmal das Array und dann noch die Speicherstellen der Strings.

    Du übergibst an den main-clone die Anfangsadresse von dem Array.

    Auch wenn es nur ein Schreibfehler ist:

    char    *t[1] ={"fuckup"};
    
    t[0] = "nr1";
    t[1] = "nr2"; // Das Element t[1] gibt es nicht mehr.
    

Log in to reply