Вы звоните malloc()
, а затем напрямую перезаписываете свой результат вызовом strndup()
, это приводит к утечке памяти.
Кроме того, логика в вызове strndup()
выглядит неправильно. Если вы хотите пропустить первые 5 символов, у вас должно быть str + 5
.
Если у вас есть strdup()
, используйте:
if (lin==9)
{
char *name = strdup(str + 5);
printf("name is: '%s'\n", name != NULL ? name : "(failed)");
}
Тогда вы, вероятно, должны break
выйти из цикла. Также обратите внимание, что указатель name
выходит из области видимости, поэтому он не доступен, например, для кодирования вне цикла.