Programmübergabe



  • Earendil schrieb:

    mein problem war, dass ich nicht wusste, wie ich meinem Programm ein Argument mitgeben kann... Das habe ich jedoch mittlerweilen herausgefunden...

    Jetzt habe ich noch ein problem mit dem befehl system("befehl")...
    weiss jemand, wie ich eine Variable in den befehl geben kann??

    so in der art...

    char *test;
    test = "BLABLA";
    system(test);
    ;damit für test das "BLABLA" eingesetzt wird...

    Da wird dir nichts anderes übrig bleiben als Programmieren zu lernen.
    Du erstellt eien Variable ohne Speicher zu reservieren.

    test = "BLABLA" geht nicht;

    char test[20];

    strcpy(test,"BLABLA");
    system(test);
    C ist zwar etwas her aber so sollte es gehen.



  • Unix-Tom schrieb:

    test = "BLABLA" geht nicht;

    doch, geht schon. Ist ein Zeiger auf (konstantes) String-Literal.



  • Nur wo zeigt dieser Zeiger hin?



  • auf
    [cpp]const char * test[/cpp]



  • das sollte man auf keinen fall machen; wenn dann:

    test = malloc(strlen("BLABLA")*sizeof(char*)); 
    /* sollte letztendlich heissen: strlen("BLABLA") * 4; weil pointer auf x86 immer 4 byte haben AFAIK */
    

    und dann per strcpy oder strncpy rueberschieben.

    oder du machst es so:

    char *blah = "BLABLA";
    

    dann macht er das gleiche wie ich oben geschrieben habe weil er bei der initialisierung auf eine adresse wartet und die automatisch alloziiert.

    blubb



  • Unix-Tom schrieb:

    Nur wo zeigt dieser Zeiger hin?

    Wie gesagt, auf ein Stringliteral. Ein »konstantes« Stück Speicher. char* test; strcpy(test, "hallo"); funktioniert natürlich nicht.

    @blubb
    Sorry aber was du schreibst ist alles falsch 😉

    Wieso willst du denn strlen("hallo")*4-bytes anfordern? "hallo" braucht genau 6 Bytes. Ein Zeichen pro Byte plus die null.

    Und char* x = "hallo"; ist genau das gleiche wie char* x; x = "hallo"; In beiden Fällen nur ein Zeiger auf eine konstante Zeichenkette.
    char x[] = "hallo" hingegen, reserviert tatsächlich 6 Bytes in die man reinschreiben könnte.



  • Also meines Wissens zeigt

    chat *test;

    auf nichts. Es ist nicht definiert.
    test = "hallo";

    reserviert keine Speicher.
    Es kann passieren das Speicher überschrieben wird da test ja irgendwo hinzeigt.
    Da c aber schon lange her ist lasse ich mich gerne eines besseren belehren.

    Und da dies nun reines Ansi-C wird, verschiebe ich es auch dort hin.



  • Dieser Thread wurde von Moderator/in Unix-Tom aus dem Forum Linux/Unix in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Unix-Tom schrieb:

    Also meines Wissens zeigt

    chat *test;

    auf nichts.
    Es ist nicht definiert.

    korrekt

    test = "hallo";
    reserviert keine Speicher.

    auch richtig

    Es kann passieren das Speicher überschrieben wird da test ja irgendwo hinzeigt.

    nee, Speicher wird nicht überschrieben. Speicher würde überschrieben werden, wenn du den Zeiger dereferenzierst. Also *test = 0; wäre zum beispiel nicht ok.

    mit test = "hallo"; wird der zeiger umgebogen und zeigt jetzt auf die Zeichenkette.



  • Zur Lösung des eigentlichen Problems:

    char befehl[256];
    ...
    sprintf(befehl, "install %s", dateiname);
    
    system(befehl);
    ...
    

Anmelden zum Antworten