Функції strcpy
та strncpy
є частиною стандартної бібліотеки C і працюють на наявній пам'яті. Тобто ви повинні надати пам’ять, в яку функції копіюють рядкові дані, і як наслідок, ви повинні мати власні засоби, щоб з’ясувати, скільки вам потрібно пам’яті.
За обмеженням, strdup
це функція Posix, і вона виконує для вас динамічне розподіл пам'яті. Він повертає покажчик на нещодавно виділену пам’ять, в яку він скопіював рядок. Але ви тепер відповідальні за цю пам’ять і, зрештою, повинні free
її.
Це робить strdup
одну із "прихованих malloc
" зручних функцій, і, мабуть, саме тому вона не є частиною стандартної бібліотеки. Поки ви використовуєте стандартну бібліотеку, ви знаєте, що ви повинні викликати по одній free
для кожного malloc
/ calloc
. Але такі функції, як strdup
введення прихованого malloc
, ви повинні обробляти так само, як і malloc
для цілей управління пам'яттю. (Ще однією такою прихованою функцією розподілу є GCC abi::__cxa_demangle()
.) Обережно!
strdup()
рядка ed може продовжуватись і до кінця поточної функції, але це може бути так чи інакше (якщо цільstrcpy()
- це буфер, що надається абонентом, глобальна змінна або сам вручну за допомогоюmalloc()
абоnew
) .