Namensräume
Varianten
Aktionen

strlen, strnlen_s

Von cppreference.com
< 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 des gegebenen nullterminierten Byte-Strings zurück, d.h. die Anzahl der Zeichen in einem Zeichenarray, dessen erstes Element von str gezeigt wird, bis einschließlich des ersten Nullzeichens.
Das Verhalten ist undefiniert, wenn str kein Zeiger auf einen nullterminierten Byte-String ist.
2) Wie (1), außer dass die Funktion Null zurückgibt, wenn str ein Nullzeiger ist, und strsz zurückgibt, wenn das Nullzeichen nicht in den ersten strsz Bytes von str gefunden wurde.
Das Verhalten ist undefiniert, wenn str kein Zeiger auf einen nullterminierten Byte-String ist und strsz größer als die Größe dieses Zeichenarrays ist.
Wie bei allen grenzgeprüften Funktionen ist strnlen_s nur garantiert verfügbar, wenn __STDC_LIB_EXT1__ von der Implementierung definiert ist und wenn der Benutzer __STDC_WANT_LIB_EXT1__ vor dem Einbinden von <string.h> auf die ganzzahlige Konstante 1 setzt.

Inhalt

[bearbeiten] Parameter

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

[bearbeiten] Rückgabewert

1) Die Länge des nullterminierten Byte-Strings str.
2) Bei Erfolg die Länge des nullterminierten Byte-Strings str, Null, wenn str ein Nullzeiger ist, strsz, wenn das Nullzeichen nicht gefunden wurde.

[bearbeiten] Anmerkungen

strnlen_s und wcsnlen_s sind die einzigen grenzgeprüften Funktionen, die den Laufzeit-Constraints-Handler nicht aufrufen. Sie sind reine Hilfsfunktionen, die zur eingeschränkten Unterstützung von nicht nullterminierten Strings verwendet werden.

[bearbeiten] 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

[bearbeiten] 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 (p: TBD)
  • K.3.7.4.4 Die strnlen_s-Funktion (p: TBD)
  • C11-Standard (ISO/IEC 9899:2011)
  • 7.24.6.3 Die strlen-Funktion (p: 372)
  • K.3.7.4.4 Die strnlen_s-Funktion (p: 623)
  • C99-Standard (ISO/IEC 9899:1999)
  • 7.21.6.3 Die strlen-Funktion (p: 334)
  • C89/C90-Standard (ISO/IEC 9899:1990)
  • 4.11.6.3 Die strlen-Funktion

[bearbeiten] Siehe auch

gibt die Länge einer breiten Zeichenkette zurück
(Funktion) [bearbeiten]
gibt die Anzahl der Bytes im nächsten Multibyte-Zeichen zurück
(Funktion) [bearbeiten]
C++-Dokumentation für strlen