Latest web development tutorials

C Fehlerbehandlung

C-Sprache bietet keine direkte Unterstützung für die Fehlerbehandlung, sondern als System Programmiersprache, es gibt den Wert des Formulars ermöglicht es Ihnen, die zugrundeliegenden Daten zugreifen zu können. Wenn ein Fehler auftritt, die meisten der UNIX oder C - Funktionsaufruf gibt 1 zurück , oder NULL, ein Fehlercode wird aucherrno gesetzt, wird dieser Fehlercode eine globale Variable ist, drückte es während des Funktionsaufrufs Fehler aufgetreten ist .Sie können eine Vielzahl von Fehlercodes <error.h> Header-Datei zu finden.

Daher kann C-Programmierer Werte zurückgeben, indem geprüft, was die entsprechende Aktion und dann Entscheidungen zu treffen auf dem Rückgabewert basiert. Entwickler bei Programminitialisierung sollte, die errno auf 0 gesetzt, was eine gute Programmierpraxis ist. Ein Wert von 0 bedeutet, dass das Programm keine Fehler.

errno, perror () und strerror ()

C - Sprache bietetperror () und strerror ()Funktion eine SMS - Nachricht mit demerrnogehörtanzuzeigen.

  • perror () Funktion , um Ihren Pass seine Zeichenfolge zu zeigen, mit einem Doppelpunkt, einem Leerzeichen und der Textdarstellung des aktuellen errno Wert.
  • strerror () Funktion gibt einen Zeiger auf den aktuellen Wert von errno Textdarstellung.

Lassen Sie uns einen falschen Fall zu simulieren, den Versuch, eine Datei zu öffnen, die nicht existiert. Sie können mehrere Möglichkeiten zur Ausgabe einer Fehlermeldung verwenden, hier nutzen wir die Funktion, die Nutzung zu demonstrieren. Eine andere Sache zu beachten, sollten Sie diestderr Ausgabedatenstrom zu allen Fehlern verwenden.

#include <stdio.h>
#include <errno.h>
#include <string.h>

extern int errno ;

int main ()
{
   FILE * pf;
   int errnum;
   pf = fopen ("unexist.txt", "rb");
   if (pf == NULL)
   {
      errnum = errno;
      fprintf(stderr, "错误号: %d\n", errno);
      perror("通过 perror 输出错误");
      fprintf(stderr, "打开文件错误: %s\n", strerror( errnum ));
   }
   else
   {
      fclose (pf);
   }
   return 0;
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt es die folgenden Ergebnisse:

错误号: 2
通过 perror 输出错误: No such file or directory
打开文件错误: No such file or directory

Division durch Null-Fehler

Während Division ist der Divisor Null, wenn nicht aktiviert ist, in einem Laufzeitfehler führen.

Um zu verhindern, dass dies geschieht, der folgende Code vor der Teilung macht zunächst den Divisor prüfen ist Null:

#include <stdio.h>
#include <stdlib.h>

main()
{
   int dividend = 20;
   int divisor = 0;
   int quotient;
 
   if( divisor == 0){
      fprintf(stderr, "除数为 0 退出运行...\n");
      exit(-1);
   }
   quotient = dividend / divisor;
   fprintf(stderr, "quotient 变量的值为 : %d\n", quotient );

   exit(0);
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt es die folgenden Ergebnisse:

除数为 0 退出运行...

Programm Exit-Status

Unter normalen Umständen beendet die erfolgreiche Umsetzung des Programms nach einer normalen Betriebszeit mit einem Wert EXIT_SUCCESS. Hier Makro EXIT_SUCCESS, die als 0 definiert.

Wenn es einen Fehler im Programm ist, wenn Sie das Programm beenden, wird Statuswert EXIT_FAILURE tragen, wird es als -1 definiert. Daher kann das oben beschriebene Verfahren wie folgt geschrieben werden:

#include <stdio.h>
#include <stdlib.h>

main()
{
   int dividend = 20;
   int divisor = 5;
   int quotient;
 
   if( divisor == 0){
      fprintf(stderr, "除数为 0 退出运行...\n");
      exit(EXIT_FAILURE);
   }
   quotient = dividend / divisor;
   fprintf(stderr, "quotient 变量的值为: %d\n", quotient );

   exit(EXIT_SUCCESS);
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt es die folgenden Ergebnisse:

quotient 变量的值为 : 4