Wie verwenden von Variablen im system() in c
Bitte helfen Sie mir mit meinem code. Ich bin mit dem system () - Funktion in c#. Lassen Sie uns sagen ich will ein neues Verzeichnis mit C-code.
char name[];
printf("Enter the name of directory: ");
scanf("%s", &name);
Dann mit system()
ich wollen, verwenden Sie die variable name[]
anstelle der Verwendung oder setzen Sie einen festen Wert wie system("mkdir ryan");
macht ein neues Verzeichnis ryan
; was ich will, geschehen wird, dass zu jedem Namen von Verzeichnis und speichern Sie es auf variable name[]
und umzusetzen, dass Wert statt ryan
. Ihre Antworten sind sehr geschätzt.
system
ist nicht der richtige Weg, um callmkdir
. Es ist eine ganz gutemkdir
- Funktion aufrufen. Mitsystem
führt zu allen Arten von Sicherheit, Stabilität und performance-Probleme, die sollten nie eingeführt worden, um mit zu beginnen. Im Grunde vergessen Sie jemals gehört, dersystem
. Es sollte absolut nie verwendet werden.- Außer, wenn Sie es brauchen 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie mit so etwas wie:
snprintf
um sicherzustellen, dass Sie nicht überlauf-Puffer, unabhängig davon, wie groß Sie denken, ist "groß genug".strlen("mkdir ")
ist weniger als 20, das ist sicher so wie es da steht. In anderen Umständen, dannsnprintf()
wäre besser.Zuerst aus (und dies wahrscheinlich spielt keine Rolle, ob Ihr code ist nur ein Beispiel), verwenden Sie nicht immer ein unbegrenztes
%s
scanf
- das öffnet Sie auf Puffer-überläufe.Wenn Sie eine Zeichenfolge wie:
können Sie nur verwenden, um erstellen Sie Ihre eigene Zeichenfolge für die Ausführung.
Und stellen Sie sicher, dass Sie wissen (oder überprüfen Sie mit
strlen
oder dynamisch zuordnen des Puffers, so dass es groß genug ist) die Größe dername
so dass Sie nicht am Ende mit einem Puffer-überlauf, der es als gut.Ein Beispiel für die dynamische Zuteilung einer:
(obwohl würden Sie wahrscheinlich wollen einige Fehler-Check-in gibt es im Fall der
mkdir
odermalloc
fehlgeschlagen).strcat
anstatt die volle Kraft dersnprintf
(es gibt keine Notwendigkeit für die Länge prüfen, hier seit wir sorgen für die Puffer ist groß genug). Wenn ich den Bau einer Zeichenfolge aus mehr als zwei Dinge oder sich nicht sicher von der Länge, würde ich wahrscheinlich wechseln, aber ich finde es nicht notwendig in diesem Fall.system
aber die Frage war speziell übersystem
mit Variablen.hier ist ein Beispiel, wie es umgesetzt werden könnte:
dirname
zu. Es mag auch erwähnenswert sein, dassgetline()
ist in POSIX 2008 und, während unter Linux und *BSD (einschließlich MacOS X), es ist nicht überall verfügbar.Müssen Sie erstellen Sie ein string w/Ihre full-Befehl zu senden, um system() in der it, was bedeutet, zuweisen von Speicherplatz für Sie (die Sie nicht für Namen in Ihrer ursprünglichen code, so dass Ihr Aufruf von scanf würde wahrscheinlich scheitern). Für sowas wie dein mkdir Beispiel könnten Sie eine Zeichenfolge, die beginnt mit mkdir & hat genug Raum nach, die für Ihr Verzeichnis-Namen, und wenn Sie den Aufruf scanf, zeigen Sie es an die Position innerhalb dieser Zeichenfolge, die Sie wollen, dass der name zu gehen; spart Sie zu tun eine strcat oder somesuch danach, und wenn dies die einzige Sache, die Sie müssen den Namen des Verzeichnisses, warum speichern Sie es zweimal?
Versuchen:
strcpy
/strcat
sollte der letzten, was auf Ihre Meinung!