Namespaces
Variants

strndup

From cppreference.net
< c ‎ | string ‎ | byte
Определено в заголовочном файле <string.h>
char * strndup ( const char * src, size_t size ) ;
(начиная с C23)

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

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

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

Содержание

Параметры

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

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

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

Примечания

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

Пример

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    const size_t n = 3;
    const char *src = "Replica";
    char *dup = strndup(src, n);
    printf("strndup(\"%s\", %lu) == \"%s\"\n", src, n, dup);
    free(dup);
    src = "Hi";
    dup = strndup(src, n);
    printf("strndup(\"%s\", %lu) == \"%s\"\n", src, n, dup);
    free(dup);
    const char arr[] = {'A','B','C','D'}; // NB: no trailing '\0'
    dup = strndup(arr, n);
    printf("strndup({'A','B','C','D'}, %lu) == \"%s\"\n", n, dup);
    free(dup);
}

Вывод:

strndup("Replica", 3) == "Rep"
strndup("Hi", 3) == "Hi"
strndup({'A','B','C','D'}, 3) == "ABC"

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

(C23)
выделяет копию строки
(функция)
копирует одну строку в другую
(функция)
выделяет память
(функция)
освобождает ранее выделенную память
(функция)