- cstring[meta header]
- std[meta namespace]
- function[meta id-type]
- cpp26[meta cpp]
namespace std {
char* strndup(const char* s, size_t size);
}- size_t[link /reference/cstddef/size_t.md]
文字列を、上限サイズを指定して複製する。
C23で<string.h>に追加された関数であり、C++26で<cstring>に取り込まれた。
std::malloc()を呼び出したときと同様に確保した領域に、sが指す配列の先頭から最大size文字、もしくは最初のヌル文字までのいずれか短いほうで初期化した文字列を作成する。
sが指す配列の先頭size文字にヌル文字が含まれない場合、複製の末尾にヌル文字が付加される。
作成した文字列の先頭文字へのポインタを返す。
返されたポインタはstd::free()に渡すことができる。
領域を確保できなかった場合、ヌルポインタを返す。
#include <cstring>
#include <cstdlib>
#include <iostream>
int main()
{
char* p = std::strndup("hello world", 5);
std::cout << p << std::endl;
std::free(p);
}- std::strndup[color ff0000]
- std::free[link /reference/cstdlib/free.md]
hello
- C++26
- Clang: 22 [mark noimpl]
- GCC: 16.1 [mark noimpl]
- Visual C++: 2026 Update 2 [mark noimpl]
strdup: 文字列を複製するstd::free(): 確保したメモリを解放する
- P3348R4 C++26 should refer to C23 not C17
- C++26がC23を参照するようになり、この関数が
<cstring>に追加された
- C++26がC23を参照するようになり、この関数が