Wie chdir mit C im Linux-Umfeld
Ich bin neu bei der c Programmierung. Wie kann ich das Verzeichnis ändern, wie /home/jobs/$ans/xxx/
während ich $ans
ist ein Benutzer, der string kann ich nicht chdir
im c-Programm.
Mein Skript unter:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char jdir;
printf("Enter job directory:"); /* user input for different directories */
scanf("jdir");
chdir("/home/jobs/%jdir/xxx");
system("ls -ltr");
return(0);
}
How to change directory mit chdir
?
sprintf
ist die Funktion, die Sie möchten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Etwas wie:
snprintf(blah, sizeof(blah), ...)
ist das standard-idiom. Sie müssen nicht reservieren, um ein weiteres Zeichen über die Zahl im Aufruf angegeben. OTOH, Sie könnte/sollte verwendenif (scanf("%199s", jdir) != 1)
Korrektur der&jdir
(gleicher Wert, andere geben) und die Sicherstellung, dass die Zeichenfolge nicht überrannt (und es 199 ist korrekt; Sie haben eine Zuordnung der extra Charakter). Und (wie @cHao sagte), dass Sie mehr Platz inblah
tippt der Benutzer eine Menge von Zeichen injdir
. In der Tatblah
sollte mindestens 15 Zeichen länger alsjdir
.blah
sollte groß genug sein, um für die input-Größe plus bekannt, text, mindestens.scanf("%s")
ist genauso unsicher wiegets
.Scheint es leicht albern, zu schreiben, dieses Programm in C, aber wenn es einen guten Grund, dies zu tun (zum Beispiel, wenn es hat sein setuid), dann sollten Sie viel mehr die Verteidigung. Ich würde so etwas tun:
Bearbeiten Geschichte dieser Antwort wird nur demonstrieren, wie schwer es ist diese zu 100% Recht - ich komme immer zu Ihr zurück und merken, dass ich vergessen hatte noch ein weiterer Fall, der verteidigt werden muss gegen.