3 * - and better other things, for that matter!
12 // extended string functions
13 size_t strnlen(const char *str
, size_t n
);
14 char *strdup(const char *str
);
15 char *strndup(const char *str
, size_t n
);
16 char *strchrnul(const char *str
, int c
);
18 // dynamically allocated string functions
19 char *strdcat(char **dest
, const char *src
);
20 char *strdncat(char **dest
, const char *src
, size_t n
);
21 char *strdcpy(char **dest
, const char *src
);
22 char *strdncpy(char **dest
, const char *src
, size_t n
);
23 char *strdcatc(char **dest
, int ch
);
25 // dynamically allocated string functions with explicit lengths
26 char *strldcat(char **dest
, int *dest_len
, const char *src
);
27 char *strldncat(char **dest
, int *dest_len
, const char *src
, size_t n
);
28 char *strldcpy(char **dest
, int *dest_len
, const char *src
, int src_len
);
29 char *strldncpy(char **dest
, int *dest_len
, const char *src
, size_t n
);
30 char *strldcatc(char **dest
, int *dest_len
, int ch
);
32 // dynamically allocated string formatting
33 char *sdprintf(const char *fmt
, ...);
34 char *vsdprintf(const char *fmt
, va_list ap
);
36 // in-place case conversion
37 void strtolower(char *str
);
38 void strtoupper(char *str
);
41 char *pathname(const char *str
);
42 char *filesuffix(const char *str
);