#include <stdlib.h>
// using malloc, free
#include <string.h>
// using strlen, memcpy
char* concatenate_strings(const char** strs, size_t n)
{
size_t* lens;
if(! (lens = malloc(n * sizeof(*lens))))
goto err_rtrn;
size_t total_len = 0;
size_t i;
for(i = 0; i < n; ++i) {
size_t cur_len = strlen(strs[i]);
lens[i] = cur_len;
total_len += cur_len;
}
char* concat;
if(! (concat = malloc(total_len + 1)))
goto err_free_lens;
char* writepos = concat;
for(i = 0; i < n; ++i) {
size_t cur_len = lens[i];
writepos = memcpy(writepos, strs[i], cur_len) + cur_len;
}
*writepos = '\0';
free(lens);
return concat;
err_free_lens:
free(lens);
err_rtrn:
return NULL;
}
Comments