57 and compute the length with a call to stdlib `strlen()`. |
57 and compute the length with a call to stdlib `strlen()`. |
58 In case you already know the length, or the string is not zero-terminated, you can use `cx_strn()` or `cx_mutstrn()`. |
58 In case you already know the length, or the string is not zero-terminated, you can use `cx_strn()` or `cx_mutstrn()`. |
59 |
59 |
60 The function `cx_strdup_a()` allocates new memory with the given `allocator` and copies the given `string` |
60 The function `cx_strdup_a()` allocates new memory with the given `allocator` and copies the given `string` |
61 and guarantees that the result string is zero-terminated. |
61 and guarantees that the result string is zero-terminated. |
62 The function `cx_strdup()` is equivalent to `cx_strdup_a()`, except that it uses the default stdlib allocator. |
62 The function `cx_strdup()` is equivalent to `cx_strdup_a()`, except that it uses the [default allocator](allocator.h.md#default-allocator). |
63 |
63 |
64 The functions `cx_strcpy_a()` and `cx_strcpy()` copy the contents of the `source` string to the `dest` string, |
64 The functions `cx_strcpy_a()` and `cx_strcpy()` copy the contents of the `source` string to the `dest` string, |
65 and also guarantee zero-termination of the resulting string. |
65 and also guarantee zero-termination of the resulting string. |
66 The memory in `dest` is either freshly allocated or re-allocated to fit the size of the string plus the terminator. |
66 The memory in `dest` is either freshly allocated or re-allocated to fit the size of the string plus the terminator. |
67 |
67 |
130 ``` |
130 ``` |
131 |
131 |
132 The `cx_strcat_a()` function takes `count` UCX strings, |
132 The `cx_strcat_a()` function takes `count` UCX strings, |
133 allocates memory for a concatenation of those strings _with a single allocation_, |
133 allocates memory for a concatenation of those strings _with a single allocation_, |
134 and copies the contents of the strings to the new memory. |
134 and copies the contents of the strings to the new memory. |
135 `cx_strcat()` is equivalent, except that is uses the default stdlib allocator. |
135 `cx_strcat()` is equivalent, except that it uses the [default allocator](allocator.h.md#default-allocator). |
136 |
136 |
137 The `cx_strcat_ma()` and `cx_strcat_m()` append the `count` strings to the specified string `str` and, |
137 The `cx_strcat_ma()` and `cx_strcat_m()` append the `count` strings to the specified string `str` and, |
138 instead of allocating new memory, reallocate the existing memory in `str`. |
138 instead of allocating new memory, reallocate the existing memory in `str`. |
139 If the pointer in `str` is `NULL`, there is no difference to `cx_strcat_a()`. |
139 If the pointer in `str` is `NULL`, there is no difference to `cx_strcat_a()`. |
140 Note, that `count` always denotes the number of variadic arguments in _both_ variants. |
140 Note, that `count` always denotes the number of variadic arguments in _both_ variants. |