Dateipfad an unterfunktion uebergeben
-
hi
ich lese ueber den aufruf der datei einen padnamen einer textdatei ein:
int main(int argc, char *argv[]) { if (argc<2) { printf("\n\nCodeFile nicht angegeben.\n\n"); exit(0); }
Wenn ich nun den Pfadnamen an ein Unterprogramm uebergeben moechte, um dort ein fopen auszufuehren, wie kann ich dann den String argc[1] an diese funktion uebergeben, reicht es evtl einen zeiger zu uebergeben, wenn ja, wie mach ich das
vielen dank
mimi
-
mimi78 schrieb:
hi
ich lese ueber den aufruf der datei einen padnamen einer textdatei ein:
int main(int argc, char *argv[]) { if (argc<2) { printf("\n\nCodeFile nicht angegeben.\n\n"); exit(0); }
Wenn ich nun den Pfadnamen an ein Unterprogramm uebergeben moechte, um dort ein fopen auszufuehren, wie kann ich dann den String argc[1] an diese funktion uebergeben, reicht es evtl einen zeiger zu uebergeben, wenn ja, wie mach ich das
vielen dank
mimimist geschrieben...heute ist absolut nicht mein tag (Beitrag bitte löschen)
-
#include <stdio.h> FILE* foo(char *datei) { FILE *fp; if ( (fp=fopen(datei,"r")) == NULL ) return NULL; else return fp; } int main(int argc, char *argv[]) { FILE* fp; if (argc < 2) { printf("blabla\n"); return 1; } fp=foo(argv[1]); /* ... */ return 0; }
-
hmm erhalte jetzt einen speicherzugriffsfehler, aber warum?
hier mein hauptprog:
int main(int argc, char *argv[]) { char char_in; if (argc<2) { printf("\n\nCodetabellen-File nicht angegeben.\n\n"); exit(0); } while ((char_in=fgetc(stdin))!=EOF) { fputc(verschluessel_zeichen(*++argv,char_in),stdout); } return 0; }
und hier das unterprogramm:
char verschluessel_zeichen(const char* path,char char_in) { char inputline[81]; char versch; char string_kurz[3]; /* Datei oeffnen*/ F_ct = fopen(path, "r"); /* pruefen ob Datei gelesen werden kann*/ if(NULL==F_ct) printf("Code-Datei konnte nicht geoeffnet werden."); /*Zeichen ersetzen*/ while((fgets(inputline,80,F_ct) != NULL)) { strncpy(string_kurz,inputline,2); string_kurz[3]='\0'; if((string_kurz[0]==char_in)!=0) { if(string_kurz[1]!=' ') versch=string_kurz[1]; } } fclose(F_ct); return versch; }
-
int main(int argc, char *argv[]) { char char_in; if (argc<2) { printf("\n\nCodetabellen-File nicht angegeben.\n\n"); exit(0); } while ((char_in=fgetc(stdin))!=EOF) { fputc(verschluessel_zeichen([b]*++argv[/b],char_in),stdout); [b]// fuer jeden durchlauf willst du ein neues arugment? glaub ich nicht[/b] } return 0; }
char verschluessel_zeichen(const char* path,char char_in) [b]// was macht diese funktion? ich seh absolut keinen sinn[/b] { char inputline[81]; char versch; char string_kurz[3]; /* Datei oeffnen*/ [b]F_ct[/b] = fopen(path, "r"); [b]// der variablenname, wo kommt der her und wieso muss der so unaussprechlich sein?[/b] /* pruefen ob Datei gelesen werden kann*/ if(NULL==F_ct) printf("Code-Datei konnte nicht geoeffnet werden."); /*Zeichen ersetzen*/ while((fgets(inputline,80,F_ct) != NULL)) { strncpy(string_kurz,inputline,2); [b]string_kurz[3]='\0'; // du schreibst ueber die grenze[/b] if((string_kurz[0]==char_in)!=0) { if(string_kurz[1]!=' ') versch=string_kurz[1]; } } fclose(F_ct); return versch; }
-
Also
(1)hab *++argv jetzt durch argv[1] ersetzt.
ich moechte hierbei den dateinamen bzw den pfad der datei uebergeben an meine funktion
(2)
char verschluessel_zeichen(const char path,char char_in)*
durch
char verschluessel_zeichen(const char* path,char char_in)hiermit moechte ich den zeiger auf den anfangswert vom pfadname uebergeben und in char 1 steht das zeichen das ersetzt werden soll
(3)
string_kurz[3]='\0'; hab ich durch string_kurz[2]='\0'; ersetzt(4)
F_ct = fopen(path, "r");hier soll der pfad anstelle von path erscheinen F_ct ist ein textfile mit einer tabeller in der steht durch welches zeichen ersetzt wird
ist vor main mit FILE *F_ct; definiert
-
der speicherzugriffsfehler tritt jedoch weiterhin auf, ich vermute mal dass das problem irgendwo bei der uebergabe ist, aber ich weiss nicht wo und wieso
-
du solltest die tabelle vorher einlesen, anstatt sie fuer jedes zeichen einzeln zu konsultieren.
-
waer es moeglich die datei im hauptprogramm zu oefnnen, dann im unterprogramm auszulesen und im hauptprog wieder zu schliessen?
-
das ist moeglich und deswegen solltest du es auch machen.
-
ok, habe jetzt folgendes gemacht:
int main(int argc, char *argv[]) { char char_in; if (argc<2) { printf("\n\nCodetabellen-File nicht angegeben.\n\n"); exit(0); } /* Datei oeffnen*/ F_ct = fopen(argv[1], "r"); /* pruefen ob Datei gelesen werden kann*/ if(NULL==F_ct) printf("\n\nCodetabellen-File konnte nicht geoeffnet werden.\n\n"); while ((char_in=fgetc(stdin))!=EOF) { fputc(verschluessel_zeichen(char_in),stdout); } /* Datei schliessen*/ fclose(F_ct); return 0; }
funktioniert soweit auch, habe mal getestet, also die verschluesselungsfuntlion funtioniert und ersetzt richtig.
ich erhalte jedoch jetzt grundsaetzlich, hinter dem uebergebenen zeichen in der ausgabe noch 2x@ , wo kann dass herkommen, und wieso geht er nicht die zeichen durch, die ich eingeb sondern schneidet nach dem ersten zeichen ab