Я бы посоветовал выделить только необходимый объем памяти:
char *str_out = malloc(strlen(str_in) + 1);
, а затем использовать другую переменную l oop, каждый раз считающую по 2, чтобы у вас было в 2 раза больше места для каждого символа в вашей l oop.
Если вы сделаете это, вы должны также поставить + 1
рядом с новой переменной l oop, чтобы скопировать ее в текущий и следующий элементы строки, таким образом дублируя символов.
Я бы также посоветовал вам использовать size_t
для ваших переменных l oop, чтобы соответствовать возвращению str_len
.
Здесь я реализовал свои предложения:
size_t str_ctr;
size_t str_ctrx2;
size_t in_str_len = strlen(in_str)
/* ... */
for( str_ctrx2 = str_ctr = 0;
str_ctr < in_str_len;
str_ctr++, str_ctrx2 += 2 )
{
out_str[str_ctrx2] = in_str[str_ctr];
out_str[str_ctrx2 + 1] = in_str[str_ctr];
}
/* null-terminate the string */
out_str[str_ctrx2] = '\0';
Я также хотел бы отметить, что вы забыли завершить строку в вашей программе. Я прокомментировал это и показал вам, как это сделать выше.