Programmieren - alles kontrollieren 4.934 Themen, 20.613 Beiträge

Ausführen von C-Programm funktioniert nicht

Nobody666 / 16 Antworten / Flachansicht Nickles

Hallo,


habe hier einen kleinen Ausschnitt von einem C-Programm. Will als Parameter eine Datei übergeben in Form -dxxx  xxx steht hierbei für den Dateinamen, sollte aber so sein, dass geprüft wird ob ein - steht, danach ob ein d steht und ich dann den Dateinamen habe, den ich später im Programm einlesen muß. Compilieren zeigt keinen Fehler, beim Ausführen mit den Parametern -dabcd zum Beispiel, bricht er mit der Fehlermeldung exe hat Fehler verursacht und wird abgebrochen ab. Wer kann helfen????????


 int main (int argc, char *argv[] ) {
   
   //Parameteruebergabe bei Programmaufruf
 for (i=1; i<argc;i++)
  {
  if ((argv[i] [0]) == '-')
   {
   switch ((argv[i]) [1])
    {
        case 'd': 
    if(sscanf(argv[i]+2,"%c",&Byte_name) !=1)
     FileSpecified=0;    
    else           
     FileSpecified=1;
     for (int j=2;int halt=1;j++)
      {
      sscanf(argv[i]+j,"%c",&Byte_name);
      Byte_name1=Byte_name;
      if(Byte_name1 !='-')
       {
        Datei_name[j-2]=Byte_name1;
       }
       else
       {
        halt=1;
        Datei_name[j-3]='\0';
        break;
       }
      }
      strcpy(File_name,Datei_name);
      strcat(File_name,".lb0");;
      break;
          
      }
     }
    }


 


will danach die Datei einlesen mit:


 if ( (werte = fopen(File_name,"rb"))==NULL)
 {
  printf("Fehler beim Lesen der Datei %s",File_name);
  exit(0);
 }
 else
  { 
  ...........                                      kann aber leider noch nicht überpruefen, ob dass dann auch funktioniert, da ich ja nicht soweit komme.


 


mfg


Nobody

bei Antwort benachrichtigen
mr.escape Nobody666 „Super, danke mr.escape Noch eine Frage. Will nun die Datei vergleichen, und dann...“
Optionen

Wie jetzt?
Bei
proggy.exe -d1409ab
soll anzahl=1 sein und bei
proggy.exe -d123ca
anzahl=2? oder eher bei
proggy.exe -d1409ab -d123ca
???
Im zweiten fall muss die zeile
FileSpecified=1;
zu
FileSpecified++;
werden (FileSpecified ist dann die anzahl). Der dateiname ist aber nur der vom letzten file.
Sollen alle dateinamen gespeichert werden, muss aus:
char File_name[12];
z.b. folgendes werden:
char File_name[MAXFILES][256];
wobei MAXFILES die maximal anzahl dateinamen ist (z.b. #define MAXFILES 32).
Aus:
sscanf(&argv[i][2], "%[^\\0]", File_name);
strcat(File_name,".lb0");
wird dann:
sscanf(&argv[i][2], "%[^\\0]", File_name[FileSpecified]);
strcat(File_name[FileSpecified],".lb0");
Die dateinamen finden sich dann unter File_name[0] bis File_name[FileSpecified-1]. FileSpecified darf aber maximal MAXFILES werden, d.h. nach dem switch block kommt:
if(FileSpecified>=MAXFILES) break;//kann auch in die for anweisung rein

mr.escape

"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen