ооочень много вещей:
Во-первых, это строковый литерал, должен быть const
char* ff="abcd"; // should not do this
const char* ff = "abcd"; // instead
Следующее ваше malloc
- Argh
f=( char*)malloc ((i + 1) * sizeof (char *)+5);
Вам нужно выделить 5 символов (i + 1 == 1)
, вы также получаете sizeof
указатель (char*
) вместо char
f=( char*)malloc (5 * sizeof (char));
следующее:
f=ff;
фактически вы перезаписали предыдущее распределение, и теперь f
указывает на ff
, поэтому strncat
терпит неудачу! Однако, даже если вы этого не сделали, strncat
завершится неудачно, потому что f
, который вы malloc
d не будет содержать завершенной строкой NUL, и у вас будут носовые демоны везде.
Итак, удалите указанное выше назначение и memset
вновь выделенный блок для 0
, и ваш код может просто работать. Если вы используете C ++, то, что вы делаете, эквивалентно
std::string f("abcd");
f.append("efg");
РЕДАКТИРОВАТЬ: я удалил это, чтобы указать на ошибки в вашем коде, а не просто почему он терпит неудачу ...