*Early work in progress.
libstring
aims to be a highly portable, Valgrind-passing, single-header library that brings better support for strings and string manipulation to ANSI C. This library does not depend on string.h
or strings.h
, using only stdio.h
, stdlib.h
and stdbool.h
(when available, falls back to the usual typedef when not on C99 or newer).
cstr_t * string_init(const char * origin); // Initializes a new cstr_t *.
void string_free_all (void); // Frees all heap allocations made by libstring.
char * string_first_token(char * str, char * delim); // Sets up tokenization and returns the first token
void string_replace(cstr_t *str, char * old, const char * new); // Replaces all instances of `old` to `new` within `str`
char * string_get_token(char * delim); // Returns a token from the char * str passed onto the previous function
cstr_t * string_to_lower_case(cstr_t * origin); // Returns a new cstr_t * with the contents of origin lower-cased
cstr_t * string_to_upper_case(cstr_t * origin); // Returns a new cstr_t * with the contents of origin upper-cased
cstr_t * string_concat(cstr_t * str1, const char * str2); // Returns a new cstr_t * with the concatenation of str1 and str2
size_t string_concat_to(cstr_t * str1, const char * str2); // Concatenates str1 and str2 to str1.
bool string_contains(cstr_t * str1, const char * str2); // Returns true if str2 is a substring of str1.
size_t string_update(cstr_t * str, const char * new_val); // Updates the value of str. Increases its memory reservation if needed.
bool string_swap(cstr_t * str1, cstr_t * str2); // Swaps the contents of str1 and str2.
bool string_reserve(cstr_t *str, size_t capacity); // Increases str's memory reservation
size_t string_replace_char(cstr_t *str, char before, char after); // Replaces all instances of a char with another.
cstr_t * string_mid(cstr_t * str, size_t pos, long length); // Returns a substring of a given string starting at position pos with a given length.
cstr_t * string_left(cstr_t * str, size_t length); // Returns the first (length) characters of a string starting from the left.
cstr_t * string_right(cstr_t * str, long length); // Returns the first (length) characters of a string starting from the right.
The other functions defined in libstring.c
are internal and not accessible.
The unit tests are done using Criterion.
Running the run-tests.sh
file builds the test file and runs it through Valgrind.
The only thing deterring builds for C89 are the C++-style comments.
You can solve this problem by removing all comments and then building:
gcc -fpreprocessed -dD -E src/libstring.c >> src/89libstring.c
gcc -fpreprocessed -dD -E src/libstring.h >> src/89libstring.h
You can then use 89libstring.c
and 89libstring.h
on C89 projects.