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