system() übergabe problem
-
hallo folgender code
#include <stdio.h>
#include <stdlib.h>void main(void)
{
int zaehler,anzahl;
char nachricht [101];
char name [101];
char net [201];
printf("Computername: ");
scanf("%100s",&name);printf("Anzahl der Angriffe: ");
scanf("%hd",anzahl);printf("Nachricht: ");
scanf("%100s",nachricht);while (zaehler <= anzahl)
{
system("net send %s %s,name nachricht");
zaehler = zaehler ++;
}
}warum kann ich system("net send %s %s,name nachricht"); nicht benutzten
wie kann ich dieses problem umgehen
danke im voraus
Brain11
-
system("net send %s %s,name nachricht");
Weil die %s nicht aufgelöst werden? Du solltest das " hinter das letzte %s setzen.
-
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 gewertetwie 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
dankeaber 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.htmlDa 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 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