C: Wörter, Zeichen, und Zeilen zählen

lordosiris

Mitglied
C:
fgets(Suchstring, 512, argv[1]);

Das Ding sollte den ersten Parameter einlesen, um dann bei strstr einen Suchstring zum vergleichen zu haben.

Meine ganzen Initialisierungen:
C:
	DIR *verzeichnis;
	FILE *pFile;
	struct dirent *zeile;
	int n=0;
	char *compare;
	char Suchstring[512];
	Suchstring = fgets(Suchstring, 512, argv[1]);

Das Programm momentan:

C:
verzeichnis=opendir(".");
		while ((zeile=readdir(verzeichnis)) != NULL){
			printf("Folgende Datei wird durchsucht: %s\n", (*zeile).d_name);
			pFile = fopen(zeile->d_name,"r");
			while (fgets(compare,512,pFile)!=NULL){
				if (strstr(compare,Suchstring) != NULL){
					printf("Treffer in dieser Datei!");
				}
			}
			n++;
			fclose(pFile);
		}
	
	printf("So viele Einträge im Verzeichnis gibt es: %d\n",n);
	closedir(verzeichnis);

Wahrscheinlich seht ihr als Pro's direkt den Fehler, den ich nicht sehe?!
 

cwriter

Erfahrenes Mitglied
@sheel
Habe ich das k übersehen oder hast du keins geschrieben? Wenn ich es übersehen habe, entschuldige bitte.
Zur Frage: Ein String gäbe doch einen Fehler aus? Oder geht das bei dieser Funktion?

/Edit:
@lordosiris
Was ist denn der Fehler bzw. was geschieht?
Du überprüfst immer noch nicht auf Fehler und bei fgets() als dritten Parameter einen String zu nehmen ist immer noch falsch:
C:
//Zuerst überprüfen:
if(argc < 3) return;
char Suchstring[512];
strcpy(Suchstring,argv[1]);
Was für einen Compiler hast du eigentlich, der das nicht blockt?

cwriter
 
Zuletzt bearbeitet:

lordosiris

Mitglied
Ah stimmt, die Überprüfung.. Entschuldigung..

Hab jetzt ein
C:
if (pFile==NULL) perror ("Error opening file");
			else {

Nach pFile = fopen..; gesetzt.

Wenns also nicht aufgeht kommt Error opening file.

Führe ich das Skript nun aus kommts soweit:
Code:
./search Josef
Folgende Datei wird durchsucht: remove_prefix.sh
Speicherzugriffsfehler

Compiler meckert nurmehr, dass "compare" uninitialisiert werden könnte, obwohl es doch in Verwendung ist?!

Ich verwende Geany unter Ubuntu. war der erste, den ich gefunden habe!
 

cwriter

Erfahrenes Mitglied
Ah, sorry, war klar.
Du nimmst einen char*, der nicht auf NULL gesetzt wurden. Das sollte so gehen (Bin aber nicht sicher. Ich mag Pointer nicht so :p):
C:
char *compare = NULL;
Oder dann gleich einen char array: Sicherer, aber auch nicht so dynamisch:
C:
char compare[512];
Geht aber auch so:
C:
char *compare = new char[512];

Gruss
cwriter
 
Zuletzt bearbeitet:

lordosiris

Mitglied
:* :* :* :* :*

Perfekt************!
Funktioniert nun, er durchsucht die Files und schreibt "TREFFER!" dazu.. So einfach. Und sooo lange hab ich mich damit herumgemüht.

Wahnsinn, willkommen in der fantastischen Welt der EDV!

Übrigens, bald sind die 2Millionen Beiträge voll. Respekt =)
 

DLRG97

Grünschnabel
Hallo Zusammen, wäre es vielleicht möglich, dass man mir das gesamte Programm zur Verfügung stellen könnte?!
 

Technipion

Erfahrenes Mitglied
Hallo DLRG97,
dieser Thread ist schon 6 Jahre alt. Also prinzipiell geht das (falls die Member noch aktiv sind), aber vielleicht eröffnest du mit deinem Problem einfach einen eigenen Thread? Du kannst ja deinen bisherigen Code posten, deine Gedanken, und die Stelle an der du nicht weiterkommst.

Gruß Technipion