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
    mimi

    mist 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


Anmelden zum Antworten