最終更新日時: 2026年06月15日 14時22分22秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<cstring>

# std::strndup(C++26)

    namespace std {
      char* strndup(const char* s, size_t size);
    }

## 概要

文字列を、上限サイズを指定して複製する。

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);
    }

### 出力

    hello

## バージョン

### 言語

- C++26

### 処理系

- Clang: 22 ❌
- GCC: 16.1 ❌
- Visual C++: 2026 Update 2 ❌

## 関連項目

- `strdup`: 文字列を複製する
- `std::free()`: 確保したメモリを解放する

## 参照

- P3348R4 C++26 should refer to C23 not C17
  - C++26がC23を参照するようになり、この関数が`<cstring>`に追加された