Namespaces
Variants

strlen, strnlen_s

From cppreference.net
< c ‎ | string ‎ | byte
Definido en el encabezado <string.h>
size_t strlen ( const char * str ) ;
(1)
size_t strnlen_s ( const char * str, size_t strsz ) ;
(2) (desde C11)
1) Devuelve la longitud de la cadena de bytes terminada en nulo dada, es decir, el número de caracteres en un array de caracteres cuyo primer elemento está apuntado por str hasta y sin incluir el primer carácter nulo.
El comportamiento es indefinido si str no es un puntero a una cadena de bytes terminada en nulo.
2) Igual que (1) , excepto que la función retorna cero si str es un puntero nulo y retorna strsz si el carácter nulo no fue encontrado en los primeros strsz bytes de str .
El comportamiento es indefinido si str no es un puntero a una cadena de bytes terminada en nulo y strsz es mayor que el tamaño de ese arreglo de caracteres.
Como con todas las funciones con verificación de límites, strnlen_s solo está garantizada su disponibilidad si __STDC_LIB_EXT1__ está definido por la implementación y si el usuario define __STDC_WANT_LIB_EXT1__ como la constante entera 1 antes de incluir <string.h> .

Contenidos

Parámetros

str - puntero a la cadena de bytes terminada en nulo que se examinará
strsz - número máximo de caracteres a examinar

Valor de retorno

1) La longitud de la cadena de bytes terminada en nulo str .
2) La longitud de la cadena de bytes terminada en nulo str en caso de éxito, cero si str es un puntero nulo, strsz si no se encontró el carácter nulo.

Notas

strnlen_s y wcsnlen_s son las únicas funciones con verificación de límites que no invocan el manejador de restricciones en tiempo de ejecución. Son funciones de utilidad puras utilizadas para proporcionar soporte limitado para cadenas no terminadas en nulo.

Ejemplo

#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
}

Salida posible:

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

Referencias

  • Estándar C23 (ISO/IEC 9899:2024):
  • 7.24.6.3 La función strlen (p: TBD)
  • K.3.7.4.4 La función strnlen_s (p: TBD)
  • Estándar C17 (ISO/IEC 9899:2018):
  • 7.24.6.3 La función strlen (p: TBD)
  • K.3.7.4.4 La función strnlen_s (p: TBD)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 7.24.6.3 La función strlen (p: 372)
  • K.3.7.4.4 La función strnlen_s (p: 623)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 7.21.6.3 La función strlen (p: 334)
  • Estándar C89/C90 (ISO/IEC 9899:1990):
  • 4.11.6.3 La función strlen

Véase también

(C95) (C11)
devuelve la longitud de una cadena ancha
(función)
devuelve el número de bytes en el siguiente carácter multibyte
(función)