string.h
C standard library (libc) |
---|
General topics |
Miscellaneous headers |
string.h is the header in the C standard library for the C programming language which contains macro definitions, constants, and declarations of functions and types used not only for string handling but also various memory handling functions; the name is thus something of a misnomer.
Functions declared in string.h
are extremely popular, since as a part of the C standard library, they are guaranteed to work on any platform which supports C. However, some security issues exist with these functions, such as buffer overflows, leading programmers to prefer safer, possibly less portable variants. Also, the string functions only work with ASCII or character sets that extend ASCII in a compatible manner such as ISO-8859-1; multibyte ASCII-compatible character sets such as UTF-8 will work with the caveat that string "length" is to be interpreted as the count of bytes in the string rather than the count of Unicode characters. Non-ASCII compatible string handling is generally achieved through wchar.h
.
Constants and types
Name | Notes |
---|---|
NULL |
macro expanding to the null pointer constant; that is, a constant representing a pointer value which is guaranteed not to be a valid address of an object in memory. |
size_t |
an unsigned integer type which is the type of the result of the sizeof operator.
|
Functions
Name | Notes |
---|---|
void *memcpy(void *dest, const void *src, size_t n);
|
copies n bytes between two memory areas, which must not overlap |
void *memmove(void *dest, const void *src, size_t n);
|
copies n bytes between two memory areas; unlike with memcpy the areas may overlap
|
void *memchr(const void *s, int c, size_t n);
|
returns a pointer to the first occurrence of c in the first n bytes of s, or NULL if not found |
int memcmp(const void *s1, const void *s2, size_t n);
|
compares the first n characters of two memory areas |
void *memset(void *, int, size_t);
|
overwrites a memory area with a byte pattern |
char *strcat(char *dest, const char *src);
|
appends the string src to dest |
char *strncat(char *, const char *, size_t);
|
appends at most n characters of the string src to dest |
char *strchr(const char *, int);
|
locates a character in a string, searching from the beginning |
char *strrchr(const char *, int);
|
locates a character in a string, searching from the end |
int strcmp(const char *, const char *);
|
compares two strings numerically |
int strncmp(const char *, const char *, size_t);
|
compares up to the first n bytes of two strings lexegraphically |
int strcoll(const char *, const char *);
|
compares two strings using the current locale's collating order |
char *strcpy(char *toHere, const char *fromHere);
|
copies a string from one location to another |
char *strncpy(char *toHere, const char *fromHere, size_t);
|
copies up to n bytes of a string from one location to another |
char *strerror(int);
|
returns the string representation of an error number e.g. errno (not thread-safe) |
size_t strlen(const char *);
|
finds the length of a C string |
size_t strspn(const char *s, const char *accept);
|
determines the length of the maximal initial substring of s consisting entirely of characters in accept |
size_t strcspn(const char *s, const char *reject);
|
determines the length of the maximal initial substring of s consisting entirely of characters not in reject |
char *strpbrk(const char *s, const char *accept);
|
finds the first occurrence of any character in accept in s |
char *strstr(const char *haystack, const char *needle);
|
finds the first occurrence of the string "needle" in the longer string "haystack". |
char *strtok(char *, const char *);
|
parses a string into a sequence of tokens; non-thread safe in the spec, non-reentrant |
size_t strxfrm(char *dest, const char *src, size_t n);
|
transforms src into a collating form, such that the numerical sort order of the transformed string is equivalent to the collating order of src. |
Extensions to ISO C
Name | Notes | Specification |
---|---|---|
char *strdup(const char *);
|
allocates and duplicates a string into memory | POSIX; originally a BSD extension |
errno_t strcpy_s(char *restrict s1, rsize_t s1max, const char *restrict s2);
|
bounds-checked variant of strcpy
|
ISO/IEC WDTR 24731 |
void *mempcpy(void *dest, const void *src, size_t n);
|
variant of memcpy returning a pointer to the byte following the last written byte
|
GNU |
void *memccpy(void *dest, const void *src, int c, size_t n
|
copies up to n bytes between two memory areas, which must not overlap, stopping when the byte c is found | UNIX 98? |
int *strerror_r(int, char *, size_t);
|
returns the string representation of an error number e.g. errno (thread-safe; some differences in semantics between GNU and XSI/POSIX) | GNU, POSIX |
size_t strlcpy(char *dest, const char *src, size_t n);
|
bounds-checked variant of strcpy
|
originally OpenBSD, now also FreeBSD, Solaris, Mac OS X |
char *strtok_r(char *, const char *, char **);
|
thread-safe version of strtok | POSIX |
char *strsignal(int sig);
|
by analogy to strerror , returns string representation of the signal sig (not thread safe)
|
BSDs, Solaris, Linux |
External links
- The Single UNIX Specification, Version 5 from The Open Group : string operations – System Interfaces Reference,