Rekursive Ordnersuche und Listenspeicherung
-
esotericlanguage-freak schrieb:
was diese komische faxensprache der malloc-caster für seltsame dinge macht, sollte ein c-progrämmchen aber eher weniger jucken.
Da hast du recht, mein Räuberhauptmann. Aber ich wollte wieder einmal ein bißchen nett sein...
Man gibt einmal zu, daß man sich in einem früheren Leben mit esoterischen Sprachen befasst hat, und:
sofort schämt man sich.
-
flamer schrieb:
Man gibt einmal zu, daß man sich in einem früheren Leben mit esoterischen Sprachen befasst hat, und:
sofort schämt man sich.kein grund zur verzweiflung. manche müssen erst in die hölle hinabgestiegen sein, um danach die eleganz und schönheit von C zu erkennen.
-
Bau dir am besten ein kleines Baumsystem dafür, denn Rekursion ist doof weil laaahm.
Lieber eine bis zwei while Schleifen mehr.
-
Rekursionsverweigerer schrieb:
denn Rekursion ist doof weil laaahm.
Ignorant!
()
-
Javaner schrieb:
Rekursionsverweigerer schrieb:
denn Rekursion ist doof weil laaahm.
Ignorant!
()
Ignorant von was ?
Von Tatschen, die sich in jedem Fachbuch, in jedem zweiten Onlineartikel über rekursive Programmierung nachlesen lassen ?
-
Rekursionsverweigerer schrieb:
Ignorant von was ?
Von Tatschen, die sich in jedem Fachbuch, in jedem zweiten Onlineartikel über rekursive Programmierung nachlesen lassen ?Und was ist mit der anderen Hälfte der Bücher?
Sorry, aber ich bin in (vernünftige) Rekursionen sogar verliebt.
Wobei eine rekursive Fakultätsberechnung (das häufigste
Beispiel zur Einführung von Rekursionen) natürlich schwachsinnig ist.
-
Wobei eine rekursive Fakultätsberechnung (das häufigste
Beispiel zur Einführung von Rekursionen) natürlich schwachsinnig ist.Warum denn? Brauchst dazu ja nur die beiden Definitionen aus dem Mathebuch abzuschreiben.
Die meisten Argumente a la rekursiv geht schief bauen ja darauf, daß mein C-Compiler keine Endrekursionsoptimierung schafft. Wie kommt ihr da eigentlich drauf?
-
So hab endlich mal wieder zeitgefunden mich mit dem Programm zu beschäftigen.
if(IsDir(File_Location)){ strcpy(Temp, WorkDir); cout<<"\tORDNER"; strcat(WorkDir,pDir->d_name); DirSeek(WorkDir,pWorkDir,cnt); strcpy(WorkDir, Temp); }
Damit mein Programm nach dem rekursiven Aufruf wieder mit dem alten Verzeichnis weiterarbeiten kann habe ich noch eine Temp-variable vom typ char mit der Länge von 200 eingebracht, ihr seht ja was ich meine.
Aber leider enthält dieses Temp nach dem Reinkopieren von WorkDir eben diesen Pfad und noch haufenweise kryptische Zeichen, eben soviele, bis die 200 Zeichen voll sind.
Wie kann ich das elegant lösen, dass wirklich nur der Pfad in Temp enthalten ist?dank euch
-
wenn kein stuss in Temp stehen soll, darf auch kein stuss WorkDir stehen, denn es wird ja nur kopiert.
ansonsten sind 200 zeichen zu wenig. windows hat ne konstante, MAX_PATH, für sowas.
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum ANSI C in das Forum DOS und Win32-Konsole verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Ich hab zwar keine Ahnung, warum mein Thread verschoben worden ist, aber solange man mir hier auch weiterhelfen kann, ist mir das gleich.
Zu der Tempvariable: beim Debugging sieht Workdir z.B. so aus "c:\\abc\", beim aufruf von strcpy(Tempt, WorkDir) habe ich in Temp aber leider solchen Mist drinstehen: "c:\\abc\'§/"(§()&&&&$$/"("("!!(§§&§$$/(§/&...." also lauter Werte die eben der Speicher vor der Deklarierung von Temp enthielt.
Wie kann ich das Bewerkstelligen, dass in Temp wirklich nur das drinsteht was in WorkDir enthalten ist?
danke
-
PlattitüdenAbonennt schrieb:
Ich hab zwar keine Ahnung, warum mein Thread verschoben worden ist, aber solange man mir hier auch weiterhelfen kann, ist mir das gleich.
Dein Problem bezieht sich einfach nicht auf ANSI/ISO C. Die verwendeten Funktionen opendir etc. sind nicht Teil des C Standards, sondern Windows spezifisch. Daher habe ich dich hierher verschoben.
Der Misst liegt übrigens daran, dass du den String nicht richtig 0 terminiert hast.
-
Hallo,
was bedeutet 0 terminieren ?
-
hallo
also strcat(temp, "\0"); führt nicht zum Erfolg
Die Frage ist ja auch, ob ich mir den vorhergehenden Ordner überhaupt merken und ihn später wieder zurückschreiben soll, oder ob es nicht auch anders ginge?
-
so die Tempgeschichte ist jetzt Geschichte nun bleibt nur noch das Problem mit dem rekursiven Ordneraufruf.
if(IsDir(File_Location)){ FNAME Temp={0}; strcpy(Temp, WorkDir); cout << Temp; cout<<"\tORDNER"; strcat(WorkDir,pDir->d_name); DirSeek(WorkDir,pWorkDir,cnt); strcpy(WorkDir, Temp);
im moment siehts so aus, ich versteh nicht, warum der die ordner in den Ordnern nicht findet.