функції strdup() і strndup() у C/C++
The strdup() і strndup() функції використовуються для дублювання рядка.
strdup() :
Синтаксис: char *strdup(const char *s);
Ця функція повертає вказівник на рядок байтів із закінченням нульовим значенням, який є дублікатом рядка, на який вказує с . Отримана пам'ять виконується динамічно за допомогою malloc і, отже, її можна звільнити за допомогою free().
Він повертає вказівник на дубльований рядок с .
Нижче наведено реалізацію C, яка демонструє використання функції strdup() у C:
C
// C program to demonstrate strdup()> #include> #include> int> main()> {> > char> source[] => 'GeeksForGeeks'> ;> > // A copy of source is created dynamically> > // and pointer to copy is returned.> > char> * target = strdup(source);> > printf> (> '%s'> , target);> > return> 0;> }> |
Вихід:
GeeksForGeeks
strndup() :
синтаксис: char *strndup(const char *s, size_t n);
Ця функція схожа на strdup(), але копіює максимум п байтів.
Примітка : якщо s довший за n, тоді копіюється лише n байт, а в кінці додається NULL (‘ ’).
Нижче наведено реалізацію C, яка демонструє використання функції strndup() у C:
C
// C program to demonstrate strndup()> #include> #include> int> main()> {> > char> source[] => 'GeeksForGeeks'> ;> > // 5 bytes of source are copied to a new memory> > // allocated dynamically and pointer to copied> > // memory is returned.> > char> * target = strndup(source, 5);> > printf> (> '%s'> , target);> > return> 0;> }> |
Вихід:
Geeks
Розглянемо відмінності у вигляді таблиці -:
| strdup() | strndup() | |
| 1. | Він використовується для повернення вказівника на байтовий рядок із завершеним нульовим значенням, | Він використовується для повернення вказівника на байтовий рядок із закінченням нульовим значенням |
| 2. | Його синтаксис -: char * strdup( const char *str1); | Його синтаксис -: char *strndup( const char *str, size_t size ); |
| 3. | Це визначено в файл заголовка | Це визначено в файл заголовка |
| 4. | Для дублювання потрібен лише один параметр, який є вказівником на рядок байтів із нульовим завершенням | Він приймає два параметри, а саме: 2. максимальна кількість байтів для копіювання з str |
| 5. | Його значенням, що повертається, є покажчик на щойно виділений рядок. | Він повертає нульовий покажчик, якщо сталася помилка. |
Посилання: Linux man(7)