strdup (strdup)

Перейти к навигации Перейти к поиску

strdup — нестандартная функция языка программирования Си, создающая копию указанной нуль-терминированной строки в куче (используя malloc) и возвращающая указатель на неё. Чтобы освободить место, используемое созданной копией, необходимо вызвать free. Функция появилась в BSD, включена в POSIX, но не является частью стандартов ANSI/ISO, хотя поддерживается почти всеми компиляторами.

Прототип описан в заголовочном файле string.h:

char* strdup (const char *src);

  • src — указатель на исходную строку.

Возвращаемое значение

[править | править код]

Указатель на копию строки. Если выделение памяти закончилось неудачей, то создания копии не происходит и функция возвращает NULL.

Пример использования

[править | править код]
#include <string.h>
#include <stdio.h>                      /* для printf() */
#include <malloc.h>                     /* для free() */

char  buf[1024];
char  *arr[300];

int main()
{
    int i,k;

    scanf("%d\n",&k);
    if(k>300) k=300;

    /* читаем k строк и складываем их */
    for(i=0;i<k;i++) {
    	fgets(buf, strlen(arr[i]), stdin);
    	arr[i]=strdup(buf);
    }
    /* выводим на печать */
    for(i=0;i<k;i++) printf("line %3d -> %s\n",i+1,arr[i]);
    /* чистим память */
    for(i=0;i<k;i++) free(arr[i]);

	return 0;
}