Spec-Zone.ru › C

strndup

Определено в заголовочном файле <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"

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/string/byte/strndup

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API