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 „Ausführen von C-Programm funktioniert nicht“
Optionen

-Variablen i und werte einfügen.
-"FileSpecified=0;" vor die for schleife einfügen.
-Diesen case block nehmen:
case 'd':
if(argv[i][2]){
sscanf(&argv[i][2], "%[^\0]", File_name);
strcat(File_name,".lb0");
FileSpecified=1;
}
break;
-vor dem letzten if block das einfügen:
if (!FileSpecified){
printf("Fehler, kein Dateiname angegeben.");
exit(0);
}
-und vor allem File_name deutlich vergrössern (12 zeichen, d.h. 11+die '\\0' sind viel zu wenig!!!)!!
Der laufzeitfehler kommt wahrscheinlich von der extrem seltsamen for schleife:
for (int j=2;int halt=1;j++)
sollte wohl so lauten:
for (int j=2, halt=0; !halt && argv[i][j]; j++)

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