system() übergabe problem
-
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 mitso 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
-
-
dann nimm lieber bei der anzahl
"short int" -
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." -
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 sodu 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