# String.h

string.h es un archivo de la Biblioteca estándar del lenguaje de programación C que contiene la definición de macros, constantes, funciones y tipos y algunas operaciones de manipulación de memoria.
Las funciones declaradas en string.h se han hecho muy populares, por lo que están garantizadas para cualquier plataforma que soporte C. Sin embargo, existen algunos problemas de seguridad con estas funciones, como el desbordamiento de buffer (buffer overflow), que hacen que algunos programadores prefieran opciones más seguras frente a la portabilidad que estas funciones ofrecen. Además, las funciones para cadenas de caracteres sólo trabajan con conjuntos de caracteres ASCII o extensiones ASCII compatibles.

## Constantes y tipos

| Nombre | Descripción |
| NULL | macro que representa la constante puntero nulo; representa un valor de puntero que no apunta a ninguna dirección válida de objeto alguno en memoria |
| size_t | tipo entero sin signo (positivo); es el tipo devuelto por el operador sizeof |

## Funciones

| Nombres | Descripción |
| atoi | convierte una cadena en una variable tipo int |
| atof | convierte una cadena en una variable tipo float |
| memcpy | copia n bytes entre dos áreas de memoria que no deben solaparse |
| memmove | copia n bytes entre dos áreas de memoria; al contrario que memcpy las áreas pueden solaparse |
| memchr | busca un valor a partir de una dirección de memoria dada y devuelve un puntero a la primera ocurrencia del valor buscado o NULL si no se encuentra |
| memcmp | compara los n primeros caracteres de dos áreas de memoria |
| memset | sobre escribe un área de memoria con un patrón de bytes dado |
| strcat | añade una cadena al final de otra |
| strncat | añade los n primeros caracteres de una cadena al final de otra |
| strchr | localiza un carácter en una cadena, buscando desde el principio |
| strrchr | localiza un carácter en una cadena, buscando desde el final |
| strcmp | compara dos cadenas alfabéticamente ('a'!='A') |
| strncmp | compara los n primeros caracteres de dos cadenas numéricamente ('a'!='A') |
| strcoll | compara dos cadenas según la colación actual ('a'=='A') |
| strcpy | copia una cadena en otra |
| strncpy | copia los n primeros caracteres de una cadena en otra |
| strerror | devuelve la cadena con el mensaje de error correspondiente al número de error dado |
| strlen | devuelve la longitud de una cadena |
| strlwr | devuelve la misma cadena pero en minúsculas |
| strspn | devuelve la posición del primer carácter de una cadena que no coincide con ninguno de los caracteres de otra cadena dada |
| strcspn | devuelve la posición del primer carácter que coincide con alguno de los caracteres de otra cadena dada |
| strpbrk | encuentra la primera ocurrencia de alguno de los caracteres de una cadena dada en otra |
| strstr | busca una cadena dentro de otra |
| strtok | parte una cadena en una secuencia de tokens |
| strxfrm | transforma una cadena en su forma de colación (??) |
| strrev | invierte una cadena |
| strupr | devuelve la misma cadena pero en mayúsculas |

### Extensiones para C ISO

| Nombre | Descripción | Especificación |
| strdup | hace un duplicado de la cadena dada reservando dinámicamente la memoria necesaria | POSIX; originalmente una extensión BSD |
| strcpy s | variante de strcpy que verifica los límites limitados | ISO/IEC WDTR 24731 |
| mempcpy | variante de memcpy que devuelve un puntero al byte siguiente al último byte escrito | GNU |
| memccpy | variante de memcpy que para al encontrar un byte determinado | UNIX 98? |
| strerror r | análogo a strerror_r (thread-safe) | GNU, POSIX |
| strlcpy | variante de strcpy que verifica los límites | originalmente OpenBSD, actualmente también FreeBSD, Solaris, OS X |
| strtok r | versión thread-safe de strtok | POSIX |
| strsignal | análogamente a strerror, devuelve la cadena por minorías del arreglo cadena en la representación de la señal sig (no thread safe) | BSDs, Solaris, Linux |