system() übergabe problem



  • @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.



  • du übergibst ein die adresse eines (char*) was jedoch nicht nötig ist:

    scanf("%100s",name);
    

    lies aber bitte beide variablen mit fgets ein:

    fgets(name,100,stdin);
    

    weiters solltest du die \n wegstreichen - mal so zur vorsicht 😉

    was bedeutet eigendlich das h bei "%hd"?

    mfG (c)h



  • hi

    %hd bedeutet Ganze Zahl vom Typ short

    so jetzt läuft der spaß

    sogar mit einer funktion den nachrichtendienst auf wunsch nach dem senden der nachrichten zu deaktivieren

    also nochmal danke für euere hilfe



    1. dann nimm lieber bei der anzahl
      "short int"

    2. habe mir dein programm rekonstruiert, aber das senden funktioniert nicht - ich hatte versucht an einen schulkollegen zu senden.
      Wie sendet man korrekt (ich dachte: net send) über das internet eine Nachricht sodass diese sie auch empfängt?
      Meldung: "Computer konnte nicht gefunden werden."

    3. nochwas zum thema - in unserem schulnetzwerk ist die datei net.exe gelöscht.. welche dll(s) benötige ich, um das programm zu rekonstruieren?

    mfg (c)h

    PS.: was ist mit (cmd-code):

    msg
    


  • sorry dass ich jetzt erst antworte

    schau dir mal den beitrag von C Kid sfprint frage an

    http://www.c-plusplus.net/forum/viewtopic.php?t=98008

    das bin ich mittlerweile und dort hab ich den ganzen code veröffentlich der in dem zustand allerdings noch nicht läuft
    ich habe ihn zwar schon wunderbar am laufen gehabt aber jetzt wolte ich noch einen zähler einbauen um anzuzeigen wieviele nachrichten es sind aber das funzt noch nicht so

    du brauchst auch keine net.exe sondern svchost.exe und dann sollte es laufen

    C:\WINDOWS\System32\svchost.exe

    ob man mit dem net send auch ins internet sendenkann weiß ich jetzt allerdings nicht


Anmelden zum Antworten