argv[] problem?
-
Hallo!
Ich habe ein Programm welches den ls Befehl unter Linux nachbaut, bzw. daran schreibe ich gerade
(Das sind nur Teile aus dem Code, natürlich sind die Dinge wie dirHandle etc. definiert)
int main (int argc, char *argv[]) if (argv[1] != "-la") { dirHandle = opendir(argv[1]); if (dirHandle) { while (0 != (dirEntry = readdir(dirHandle))) { cout << dirEntry->d_name << endl; } closedir(dirHandle); } } if (argv[1] == "-la") { cout<<"in"<<endl; //User wrote: ls -la file, now we mus use the stat struct to get all file parameters :) //Do the same as in the if above, just with argv[2] coz argv[1] is -la dirHandle = opendir("."); if (dirHandle) { while (0 != (dirEntry = readdir(dirHandle))) { cout << dirEntry->d_name << endl; } closedir(dirHandle); } } cout<<argv[1]<<endl<<endl; cout<<"here";
Das Problem ist nun folgendes:
Eingabe
./a.out /tmp
Listet mir die Dateien und Ordner im /tmp Verzeichnis auf
Eingabe
./a.out -la
Passiert gar nichts, es wird argv[1] ausgegeben und "here" ausgegeben. Es wird jedoch nicht in die if Abfrage: if (argv[1] == "-la") reingegangen!!!
Die Ausgabe von argv[1] ist auch -la also müsste ja if (-la == -la) true ergeben!Was könnte der Fehler sein?
Danke für die shcnelle Hilfe!
-
argvspinnt schrieb:
Was könnte der Fehler sein?
Du vergleichst Zeiger miteinander (argv[1] und "-la" zeigen zwar auf identisch aussehende Zeichenketten, die aber an völlig verwschiedenen Speicheradressen stehen). Wenn du String-Inhalte vergleichen willst, nimm strcmp().
-
okay danke
jetzt funktionierts aber eine Frage hätt ich noch:cout<<ctime(&fl.st_atime)<<dirEntry->d_name<<endl;
gibt folgendes Ergebnis:
Sun Jul 1 22:11:47 2007
vidoku~Ich benötige aber folgendes:
Sun Jul 1 22:11:47 2007 vidoku~
Wie kann ich es so programmieren, dass alles in der selben Zeile steht?
-
Hallo:
if (!strcmp(argv[1], "-la"))
Ergibt:
Segmentation fault (core dumped)
Wie kann das sein?
Das ganze hat 10 Minuten vorher prima geklappt!
Die Segmentation fault kann nur die Zeileif (!strcmp(argv[1], "-la"))
bedeutet, da ich folgendes geschrieben habe:
cout<<"test"<<endl; if (!strcmp(argv[1], "-la")) cout<<"hinten"<<endl;
Und es wird lediglich "test" ausgegeben gefolgt von "Segmentation fault"
Danke für die Hilfe
-
ist argv[1] überhaupt ein gültiger Array-Member?
btw.
// anstelle if(a) { } if(!a) { } // solltest du lieber else benutzen if(a) { } else { }
-
okay hab jetzt alles rausbekommen
Mir fehlt nur noch das problem mit der ctime() dass keine neue Zeile gemacht werden soll^^
-
Ich wußte gar nicht, daß man: ctime dort ein NewLine an die Ausgabe anhängt - aber man lernt nie aus
(extra nochmal nachgesehen hat - er macht's doch)
Da hast du zwei Möglichkeiten, ans Ziel zu kommen: Entweder du nimmst dir den Rückgabestring von ctime() und überschreibst das letzte Zeichen mit '\0' oder du verzichtest auf ctime() und baust dir das Zeitformat mit man: strftime zusammen.