Hallo!
Ich hab ja vorhin das mit den Argumenten gefragt und es hat mir auch echt gut geholfen. Jetzt wollte ich das ganze in der Praxis anwenden und prompt klappts nicht mehr. Es wird kompiliert und es läßt sich ausführen. Aber es gibt eine Speicherzugriffsverletzung ab dem Punkt wo die Datei geöffnet werden muss!
Ich starte das Programm mit seinem Namen und dem Pfad zur Datei! Leider nimmt er den Pfad so nicht an. Aber wie soll ich dann sonst den Pfad so übergeben? Ich will es ja über die Argumente machen und nicht statisch im Code.
Ich hab ja vorhin das mit den Argumenten gefragt und es hat mir auch echt gut geholfen. Jetzt wollte ich das ganze in der Praxis anwenden und prompt klappts nicht mehr. Es wird kompiliert und es läßt sich ausführen. Aber es gibt eine Speicherzugriffsverletzung ab dem Punkt wo die Datei geöffnet werden muss!
Code:
/*Includes*/
#include <stdio.h>
#include <mysql.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
/*Defines*/
#define LINE_SIZE 4096
/*Prototypen*/
char* mystrtok(char*, char);
void writeInDatabase(MYSQL*);
int strings_ausgeben(char*, char**, size_t);
/*globale Variablen*/
extern int errno;
/*----------------------------------------------------------------------------*/
/*Hauptfunktion main startet das Programm*/
int main(int argc, char *argv[]) {
/*Variablen*/
int i;
char *list[1024];
/*Argumente pruefen*/
for(i = 0; i < argc; i++) {
/*Funktion aufrufen und Programm starten*/
if (strings_ausgeben(argv[i], list, sizeof(list) / sizeof(char*)) >= 0) {
printf("%s\n", "Programmstart");
}
}
return 0;
}/*Ende der Funktion main*/
/*----------------------------------------------------------------------------*/
/*Hier wird die Zeichenkette ermittelt, die spaeter auch in die Datenbank
eingetragen werden soll (Zeile fuer Zeile)*/
int strings_ausgeben(char *parm, char **path, size_t path_size) {
/*Variablen*/
int i;
FILE *super;
FILE *datei;
char *word = NULL;
char gelesene_Kommas = ',';
char buffer[LINE_SIZE];
const char *pfadzuSuper;
pfadzuSuper = "/home/tracer/wlan_DB/alert_files/super.txt";
/*Datei anlegen*/
super = fopen(pfadzuSuper, "wt");
if (super == NULL) {
perror("Fehler beim Oeffnen der Datei zum Schreiben(Funktion strings_ausgeben) ");
errorHandler();
}
/*Datei zum Lesen oeffnen*/
datei = fopen(path[1024], "rt");HIER klappts nicht mehr
if (datei == NULL) {
perror("Fehler beim Oeffnen der Datei zum Auslesen(Funktion strings_ausgeben) ");
errorHandler();
}
for(i = 0; i < path_size; i++) {
if (strcmp(parm, path[i]) == 0) {
/*Jede Zeile durchgehen und immer den String einlesen*/
while(fgets(buffer, LINE_SIZE, datei) != NULL) {
word = mystrtok(buffer, gelesene_Kommas);
for(i = 0; word != NULL; i++) {
if (i == 12) {
/*Das Eingelesene wird in die Datei
super.txt geschrieben*/
fprintf(super, "%s\n", word);
break;
}
word = mystrtok(NULL, gelesene_Kommas);
}
}
}
}
/*Datei schliessen*/
fclose(datei);
fclose(super);
}/*Ende der Funktion datei_ausgeben*/
/*----------------------------------------------------------------------------*/
/*Diese Funktion uebernimmt die Aufgabe der C-eigenen Funktion strtok()
Mit der C-eigenen Funktion wurden leere Teile zwischen den Kommas
ueberlesen und der naechste Wert wurde ausgegeben. Diese Funktion
arbeitet sauberer*/
char* mystrtok(char *s, char delim) {
/*Variablen*/
char *curr = NULL;
char *ret = NULL;
static char *buffer = NULL;
if (s) {
buffer = s;
}
curr = buffer;
if (curr) {
/*Einzelne Characters durchgehen solange bis Komma
oder ein \0 Zeichen*/
while(*curr != delim && *curr != '\0') {
curr++;
}
if (*curr == '\0') {
return NULL;
}
*curr = '\0';
ret = buffer;
buffer = curr + 1;
}
return ret;
}/*Ende der Funktion mystrtok*/
Ich starte das Programm mit seinem Namen und dem Pfad zur Datei! Leider nimmt er den Pfad so nicht an. Aber wie soll ich dann sonst den Pfad so übergeben? Ich will es ja über die Argumente machen und nicht statisch im Code.
Zuletzt bearbeitet: