Namespaces
Variants

abort_handler_s

From cppreference.net
< c ‎ | error
Definiert in Header <stdlib.h>
void abort_handler_s ( const char * restrict msg,

void * restrict ptr,
errno_t error

) ;
(seit C11)

Schreibt eine implementierungsdefinierte Nachricht an stderr , die die Zeichenkette, auf die msg zeigt, enthalten muss, und ruft abort() auf.

Ein Zeiger auf diese Funktion kann an set_constraint_handler_s übergeben werden, um einen Handler für Laufzeitbedingungsverletzungen einzurichten.

Wie bei allen grenzprüfenden Funktionen ist abort_handler_s nur garantiert verfügbar, wenn __STDC_LIB_EXT1__ durch die Implementierung definiert ist und wenn der Benutzer __STDC_WANT_LIB_EXT1__ auf den ganzzahligen Konstantenwert 1 setzt, bevor <stdlib.h> eingebunden wird.

Inhaltsverzeichnis

Parameter

msg - Zeiger auf die Nachricht, die in den Standardfehlerstrom geschrieben wird
ptr - Zeiger auf ein implementierungsdefiniertes Objekt oder einen Nullzeiger. Beispiele für implementierungsdefinierte Objekte sind Objekte, die den Namen der Funktion angeben, die den Verstoß erkannt hat, und die Zeilennummer, bei der der Verstoß erkannt wurde
error - ein positiver Wert vom Typ errno_t

Rückgabewert

keine; diese Funktion kehrt nicht zum Aufrufer zurück

Hinweise

Wenn set_constraint_handler_s niemals aufgerufen wird, ist der Standard-Handler implementierungsdefiniert: Es kann abort_handler_s , ignore_handler_s oder ein anderer implementierungsdefinierter Handler sein.

Beispiel

#define __STDC_WANT_LIB_EXT1__ 1
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
#ifdef __STDC_LIB_EXT1__
    char dst[2];
    set_constraint_handler_s(ignore_handler_s);
    int r = strcpy_s(dst, sizeof dst, "Too long!");
    printf("dst = \"%s\", r = %d\n", dst, r);
    set_constraint_handler_s(abort_handler_s);
    r = strcpy_s(dst, sizeof dst, "Too long!");
    printf("dst = \"%s\", r = %d\n", dst, r);
#endif
}

Mögliche Ausgabe:

dst = "", r = 22
abort_handler_s was called in response to a runtime-constraint violation.
The runtime-constraint violation was caused by the following expression in strcpy_s:
(s1max <= (s2_len=strnlen_s(s2, s1max)) ) (in string_s.c:62)
Note to end users: This program was terminated as a result
of a bug present in the software. Please reach out to your
software's vendor to get more help.
Aborted

Referenzen

  • C11-Standard (ISO/IEC 9899:2011):
  • K.3.6.1.2 Die abort_handler_s-Funktion (S: 605)

Siehe auch

Ignorieren-Callback für die bounds-checked Funktionen
(Funktion)
Setzt den Fehler-Callback für bounds-checked Funktionen
(Funktion)