homer512 icon

Concat

homer512 | PRO | 10/15/15 06:51:31 AM UTC | 0 ⭐ | 673 👁️ | Never ⏰ | []
C |

730 B

|

None

|

0 👍

/

0 👎

#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