Namespaces
Variants

strndup

From cppreference.net
Определено в заголовочном файле <string.h>
char * strndup ( const char * str, size_t size ) ;
(динамическая память TR)

Возвращает указатель на байтовую строку, завершающуюся нулём, которая содержит копии не более size байт из строки, на которую указывает str . Если нулевой терминатор не встречается в первых size байтах, он добавляется в дублированную строку.

Возвращаемый указатель должен быть передан в free во избежание утечки памяти.

Если возникает ошибка, возвращается нулевой указатель и errno может быть установлен.

Как и все функции из Dynamic Memory TR, strndup гарантированно доступна только в случае, если реализация определяет __STDC_ALLOC_LIB__ и если пользователь определяет __STDC_WANT_LIB_EXT2__ как целочисленную константу 1 перед включением заголовка string.h .

Содержание

Параметры

str - указатель на нуль-терминированную строку байтов для дублирования
size - максимальное количество байтов для копирования из str

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

Указатель на вновь выделенную строку или нулевой указатель, если произошла ошибка.

Примечания

Функция идентична POSIX strndup за исключением того, что она может, но не обязана устанавливать errno при ошибке.

Пример

#ifdef __STDC_ALLOC_LIB__
#define __STDC_WANT_LIB_EXT2__ 1
#else
#define _POSIX_C_SOURCE 200809L
#endif
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    const char *s1 = "String";
    char *s2 = strndup(s1, 2);
    printf("strndup(\"String\", 2) == %s\n", s2);
    free(s2);
}

Вывод:

strndup("String", 2) == St

Смотрите также

(dynamic memory TR)
выделить копию строки
(функция)
копирует определенное количество символов из одной строки в другую
(функция)
выделяет память
(функция)