Problem mit Pointern und Structur
-
N'Abend
Ich weis nicht wo's besser aufgehoben ist, ANSI C oder WinAPI:
#include <windows.h> #include <stdio.h> #include <stdlib.h> #define directory "C:\\*" #define Max_Dateien 40 int main() { char cZielpfad[80]; int i=0,a=1,b=0; char *pFN[Max_Dateien], *pDN[Max_Dateien]; HANDLE fHandle; FILE* fZiel; WIN32_FIND_DATA wfd[Max_Dateien]; gets(cZielpfad); if((fZiel=fopen(cZielpfad,"w"))==NULL) puts("\nFehler beim Erzeugen der Datei!"); fHandle=FindFirstFile(directory,&wfd[0]); pDN[0] = wfd[0].cFileName; for (i=1; FindNextFile(fHandle,&wfd[i]); i++) { if (wfd[i].dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY) //Hier muss irgendwas schief gehen. { pDN[a] = wfd[i].cFileName; a++; } else { pFN[b] = wfd[i].cFileName; b++; } } for (i=0; i<a; i++) fprintf(fZiel,"%s\n",*pDN[i]); for (i=0; i<b; i++) fprintf(fZiel,"%s\n",*pFN[i]); FindClose(fHandle); fclose(fZiel); return 0; }
Soweit so gut, nur leider werden mir die Adressen(?) ausgegeben und ich hab ehrlich gesagt keine Ahnung wie ich nun die Strings ausgebe.
Komme mit der Structur aus der WinAPI ins hadern...Könnt ihr mir da mal kurz unter die Arme greifen?
[ Dieser Beitrag wurde am 27.03.2003 um 00:40 Uhr von THE_FreaK editiert. ]
-
fprintf(file, "%s", string);
statt
fprintf(file, "%i", *string);
-
ups... ja, ich vergas, aber das hatte ich voher (hab schon wieder zuviel rumprobiert), da bekam ich aber trotzdem zahlen => irgendwo bei der zuweisung von pDN bzw pFN muss der Bock stecken.
nehm ich nämlich die %s stürzt das programm mit nem "Error on read *blablabla*" ab, daher hab ich mal %i verwendet um zu sehen was überhaupt ankommt[ Dieser Beitrag wurde am 27.03.2003 um 00:28 Uhr von THE_FreaK editiert. ]
-
pDN[0] wird nicht initialisiert. Ich würde mal sagen, du mußt vor der Schleife dieselbe Unterscheidung zwischen File und Directory machen wie innerhalb ...
-
pDN[0] müsste eigentlich in sofern Egal sein, da es eh nur '..' enthält...
-
Um mal Bashars Antwort nochmals zu posten:
for (i=0; i<a; i++) fprintf(fZiel,"%s\n",pDN[i]); for (i=0; i<b; i++) fprintf(fZiel,"%s\n",pFN[i]);
Vielleicht siehst Du ja jetzt was er (außer dem %s) noch geändert hatte...
Richte Dein Augenmerk auf die Zeilen mit de, fprintf und vergleiche mit Deiner Version...[ Dieser Beitrag wurde am 27.03.2003 um 09:47 Uhr von Hepi editiert. ]
-
Vereinfachung des Codes:
char a[256]; char* b[5]; for( int i=0; i<5; i++) { sprintf( a, "%d", i); b[i] = a; }
Was steht nun wohl in b[0]..b[4] ??
-
ups, vergiß das was ich über pDN[0] geschrieben habe
-
@Hepi joa, da hab ich wohl den '*' übersehen... und trotzdem funzts nit.
grad getestet.@RenéG sry, aber ich kapier den zusammenhang grad absolut nich...
-
bei mir funktionierts einwandfrei...
wenn du C:\* durchsuchst, hast du vielleicht mehr als 40 gefundene dateien??
-
komisch, also bei mir poppt immer ne Fehlermeldung auf mit Folgendem Inhalt:
Die Anweisung in "0x00404a9c" verweist auf Speicher in "0xcccccccc". Der Vorgang "read konnte nicht auf dem Speicher durchgeführt werden.
-
@Shade Ich habs auf MAX 100 erweitert und es kommt immernoch der Fehler. es passiert definitiv beim Lesezugriff auf die Pointer pDN und pFN.
Welchen Compiler nimmst du denn, bzw unter welchem OS?
Ich benutz MSVC++ unter WinXP.