system() übergabe problem



  • sorry das hab ich vorher übersehen wie ich den code reingestellt habe das ist noch die alte version

    mittlerweile die neue

    system("net send %s %s",name,nachricht);
    

    aber der compiler liefert folgenden fehler

    "to manny arguments in function 'system'"

    keine ahnung warum



  • Weil du das nicht benutzen kannst wie ein printf, system nimmt nur einen Parameter entegegen.

    Bau dir mittels sprintf einen fertigen String zusammen und übergib ihn system().



  • Weil system(char* cmd) nur einen Parameter übernimmt.

    Du kannst es so machen:

    char buffer[200];
    sprintf(buffer, "net send %s %s", name, nachricht);

    Natürlich die Größe von buffer richtig setzen...

    MfG



  • Danke für die schnelle und erfolgreiche hilfe

    Brain11



  • scanf("%hd",anzahl);

    muss übrigens korrekt

    scanf("%d",&anzahl);

    heissen.

    Nachtrag: und

    zaehler = zaehler ++;

    ist unsinnig, nur

    zaehler ++;



  • Danke für den hinweiß aber des hab ich scho lange ich hab ja aus versehen die alte version reingestellt

    jetzt läuft ja alles

    aber ich hab a neues problem

    also aktueller code

    #include <stdio.h>
    #include <stdlib.h>
    
    void main(void)
    
    {
    
    int anzahl;
    int zaehler;
    char nachricht [101];
    char name [101];
    char buffer [201];
    
    zaehler = 1;
    
    printf("Computername: ");
    scanf("%100s",&name);
    
    printf("Anzahl der Angriffe: ");
    scanf("%hd",&anzahl);
    
    printf("Nachricht: ");
    scanf("%100s",&nachricht);
    
    sprintf(buffer, "net send %s %s", name,nachricht);
    
    for (;zaehler<=anzahl;zaehler++)
      {
        system(buffer);
      }
    
    }
    

    wenn ich aber als nachricht mehr als ein wort eingebe dann wird nur das erste wort gesendet
    also wird der blank als return gewertet

    wie kann ich dieses problem umgehen

    danke im voraus



  • kann ich in c dieses problem überheupt umgehen???



  • char nachricht[101];
    fgets(nachricht, 101, stdin);

    MfG



  • Wenn du unter Windows einen "Satz" schicken willst, musst du ihn in Hochkommas setzen:

    net send 192.168.0.1 "Hallo Welt"



  • des is mir klar
    danke

    aber die scanf funktion ließt ja nach dem blank nicht weiter sondern sieht das blank als return

    ich glaub nicht dass das so einfach zu umgehen ist oder doch??



  • Hat dir doch rocksteady eben geschrieben. Lies es mit fgets ein.

    Wenn willst du mit dem Tool eigentlich ärgern??



  • Sorry hab ich überlesen



  • ahm

    ihr könnt mich ja jetzt für blöd halten aber ich bring des net zum laufen

    mit fgets net und mit gets ah net

    wie muss denn die syntax für meinen fall genau lauten und vor allem an welcher stelle im code

    danke



  • @Brain11
    Nimm dir mal eine Doku über die C-Funktionen zur Hand oder diesen Link: http://www.cplusplus.com/ref/indexr.html

    Da steht drin, wie man es benutzt und für was es ist. Dann solltest du auch draufkommen wo du es in deinem Code einbauen musst.

    Wenn du übrigens ein %s bei scanf() einliest und du ein Array angibst, dann darfst du das & nicht machen! Der Name des Arrays allein beinhaltet bereits die Adresse. Genauso verhält es sich bei fgets(), wie du bei rocksteadys Beitrag sehen kannst.



  • Dein Problem ist, dass fgets so lange liest, bis ein newline kommt. Dieses speichert fgets auch noch in den string. Da du diesen Zeilenumbruch aber nicht haben willst, musst du das letzte Zeichen, dass fgets eingelesen hat wieder überschreiben:

    char Nachricht[100];
            char Rechner[100];
    
            printf("\nNachricht eingeben: ");
            fgets(Nachricht, 100, stdin);
    
            printf("\nRechner eingeben: ");
            fgets(Rechner, 100, stdin);
    
            Rechner[strlen(Rechner)-1] = '\0';
            Nachricht[strlen(Nachricht)-1] = '\0';
    

    Jetzt kannst du das ganze mit sprintf zu einem Ausgabe-String zusammenbauen und an system() übergeben.



  • @DarthZiu:
    das '\0' zu setzen übernimmt doch das fgets...

    mfg (c)h



  • Jo, aber genau da ist das Problem:

    Wenn du "Hallo Welt" einliest, sieht der String in etwa so aus:
    [ H ][ a ][ l ][ l ][ o ][ ][ W ][ e ][ l ][ t ][ \n ][ \0 ]

    fgets speichert den Zeilenumbruch mit. Und den überschreib ich einfach mit noch einem '\0'. Das Array sieht dann so aus:
    [ H ][ a ][ l ][ l ][ o ][ ][ W ][ e ][ l ][ t ][ \0 ][ \0 ]

    Und damit funzt es. Hab es selbst probiert.



  • und wenn mal kein '\n' da steht?
    zB. wenn die 100 zeichen überschritten worden wären (wurde ja verhindert)... dann würde es das letzte zeichen löschen



  • hallo

    also ich find es echt super dass ihr mir so gut helft

    das ist meiner meinung nach aber nicht erforderlich (habs ausprobiert) Rechner[strlen(Rechner)-1] = '\0';
    es geht aber auch mit

    so also jezt hab ich wie solls anders sein aber noch ein weiteres problem und zwar wenn ich das so schreibe:

    printf("\nNachricht: ");
    fgets(nachricht,100,stdin);
    
    printf("\nComputername: ");
    scanf("%100s",&name);
    
    printf("\nAnzahl der Angriffe: ");
    scanf("%hd",&anzahl);
    

    habi ich kein problem aber wenn ich das so machen taucht ein newline problem auf

    printf("\nComputername: ");
    scanf("%100s",&name);
    
    printf("\nAnzahl der Angriffe: ");
    scanf("%hd",&anzahl);
    
    printf("\nNachricht: ");
    fgets(nachricht,100,stdin);
    

    wie kann ich das verhindern???

    Danke



  • @chille

    Das stimmt schon. Aber wenn die 100 zeichen überschritten werden, ist eh was faul.

    Aber damit du zufrieden bist (nur Spaß 😉 ):
    Mann müsste natürlich noch abfragen, ob es sich um ein '\n' handelt, bevor man es überschreibt.


Anmelden zum Antworten