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"
Смотрите также
|
(C23)
|
выделяет копию строки
(функция) |
|
(C11)
|
копирует одну строку в другую
(функция) |
|
выделяет память
(функция) |
|
|
освобождает ранее выделенную память
(функция) |