¿Son strupr() y strlwr() en string.h parte del estándar ANSI?

2 minutos de lectura

avatar de usuario
ex serpiente

Estaba buscando esto en Internet y en todos los lugares con las funciones de string.h, estos dos no se mencionan.

¿Es porque qué? ¿No están en todos los compiladores?

  • Relacionado (si no es un duplicado): stackoverflow.com/q/23618316/694576

    – alk

    12/10/2014 a las 17:22

avatar de usuario
miguel rebabas

Son funciones no estándar de la biblioteca C de Microsoft. Desde entonces, MS los ha desaprobado a favor de funciones renombradas _strlwr() y _strupr():

Tenga en cuenta que los documentos de MS afirman que son funciones POSIX, pero por lo que puedo decir, nunca lo han sido.

Si necesita usarlos en una cadena de herramientas que no sea de MS, son bastante fáciles de implementar.

char* strlwr(char* s)
{
    char* tmp = s;

    for (;*tmp;++tmp) {
        *tmp = tolower((unsigned char) *tmp);
    }

    return s;
}

  • También son compatibles con gcc, incluso si intenta forzar el cumplimiento de los estándares con algo como -std=c11.

    – AJM

    5 mayo 2021 a las 17:34

  • Con respecto a que son funciones POSIX, hay una versión en línea de búsqueda de POSIX.1-2017 alojada en pubs.opengroup.org/onlinepubs/9699919799 – y definitivamente no se mencionan en él.

    – AJM

    5 mayo 2021 a las 19:58


  • Además, es posible que desee agregar #include <ctype.h> en ese fragmento de código, ya que tolower lo necesita y strlwr necesario <string.h> en lugar de.

    – AJM

    5 mayo 2021 a las 20:03

Estas funciones no son funciones estándar de C. Por lo tanto, está definido por la implementación si son compatibles o no.

Estas funciones no son estándar y, de hecho, sus firmas están rotas o no se pueden utilizar. En general, no puede mapear una cadena en el lugar porque la longitud puede cambiar en el mapeo de mayúsculas y minúsculas.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad