Namespaces
Variants

strlen, strnlen_s

From cppreference.net
< c ‎ | string ‎ | byte
Definiert in Header <string.h>
size_t strlen ( const char * str ) ;
(1)
size_t strnlen_s ( const char * str, size_t strsz ) ;
(2) (seit C11)
1) Gibt die Länge der gegebenen nullterminierten Byte-Zeichenkette zurück, das heißt die Anzahl der Zeichen in einem Zeichen-Array, dessen erstes Element durch str adressiert wird, bis zum ersten Nullzeichen, dieses jedoch nicht einschließend.
Das Verhalten ist undefiniert, wenn str kein Zeiger auf eine nullterminierte Byte-Zeichenkette ist.
2) Gleich wie (1) , außer dass die Funktion Null zurückgibt, falls str ein Nullzeiger ist, und strsz zurückgibt, falls das Nullzeichen nicht in den ersten strsz Bytes von str gefunden wurde.
Das Verhalten ist undefiniert, wenn str kein Zeiger auf eine nullterminierte Byte-Zeichenkette ist und strsz größer als die Größe dieses Zeichenarrays ist.
Wie bei allen grenzprüfenden Funktionen ist strnlen_s nur garantiert verfügbar, wenn __STDC_LIB_EXT1__ durch die Implementierung definiert ist und wenn der Benutzer __STDC_WANT_LIB_EXT1__ auf den Integer-Konstantenwert 1 setzt, bevor <string.h> eingebunden wird.

Inhaltsverzeichnis

Parameter

str - Zeiger auf den nullterminierten Byte-String, der untersucht werden soll
strsz - maximale Anzahl der zu untersuchenden Zeichen

Rückgabewert

1) Die Länge der nullterminierten Byte-Zeichenkette str .
2) Die Länge der nullterminierten Byte-Zeichenkette str bei Erfolg, null falls str ein Nullzeiger ist, strsz falls das Nullzeichen nicht gefunden wurde.

Hinweise

strnlen_s und wcsnlen_s sind die einzigen bounds-checked functions , die keinen Runtime-Constraints-Handler aufrufen. Es handelt sich um reine Hilfsfunktionen, die eingeschränkte Unterstützung für nicht nullterminierte Zeichenketten bereitstellen.

Beispiel

#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>
#include <string.h>
int main(void)
{
    const char str[] = "How many characters does this string contain?";
    printf("without null character: %zu\n", strlen(str));
    printf("with null character:    %zu\n", sizeof str);
#ifdef __STDC_LIB_EXT1__
    printf("without null character: %zu\n", strnlen_s(str, sizeof str));
#endif
}

Mögliche Ausgabe:

without null character: 45
with null character:    46
without null character: 45

Referenzen

  • C23-Standard (ISO/IEC 9899:2024):
  • 7.24.6.3 Die strlen-Funktion (p: TBD)
  • K.3.7.4.4 Die strnlen_s-Funktion (p: TBD)
  • C17-Standard (ISO/IEC 9899:2018):
  • 7.24.6.3 Die strlen-Funktion (S.: TBD)
  • K.3.7.4.4 Die strnlen_s-Funktion (S.: TBD)
  • C11-Standard (ISO/IEC 9899:2011):
  • 7.24.6.3 Die strlen-Funktion (S: 372)
  • K.3.7.4.4 Die strnlen_s-Funktion (S: 623)
  • C99-Standard (ISO/IEC 9899:1999):
  • 7.21.6.3 Die strlen-Funktion (S: 334)
  • C89/C90 Standard (ISO/IEC 9899:1990):
  • 4.11.6.3 Die strlen-Funktion

Siehe auch

(C95) (C11)
gibt die Länge einer Breitzeichen-Zeichenkette zurück
(Funktion)
gibt die Anzahl der Bytes im nächsten Multibyte-Zeichen zurück
(Funktion)