- cstring[meta header]
- std[meta namespace]
- function[meta id-type]
- cpp26[meta cpp]
namespace std {
void* memccpy(void* s1, const void* s2, int c, size_t n);
}- size_t[link /reference/cstddef/size_t.md]
メモリデータを、指定した文字が現れるまでコピーする。
C23で<string.h>に追加された関数であり、C++26で<cstring>に取り込まれた。
この関数はフリースタンディング環境でも提供される。
s2が指すオブジェクトからs1が指すオブジェクトへ、文字c (unsigned charに変換される) が最初に現れてコピーされるまで、もしくはnバイトをコピーするまで、いずれか早いほうまでバイトをコピーする。
コピー元とコピー先の領域が重なっている場合、動作は未定義である。
コピー先s1において、コピーされた文字cの次の位置を指すポインタを返す。
s2の先頭nバイトに文字cが見つからなかった場合、ヌルポインタを返す。
#include <cstring>
#include <iostream>
int main()
{
const char src[] = "abc/def";
char dst[8] = {};
// '/'が現れるまでコピーする
char* p = static_cast<char*>(std::memccpy(dst, src, '/', sizeof(dst)));
std::cout << dst << std::endl;
std::cout << (p != nullptr ? "found" : "not found") << std::endl;
}- std::memccpy[color ff0000]
abc/
found
- C++26
- Clang: 22 [mark noimpl]
- GCC: 16.1 [mark noimpl]
- Visual C++: 2026 Update 2 [mark noimpl]
memcpy: メモリデータをコピーするmemmove: メモリデータをコピーする(領域重複可)
- P3348R4 C++26 should refer to C23 not C17
- C++26がC23を参照するようになり、この関数が
<cstring>に追加された
- C++26がC23を参照するようになり、この関数が