Skip to content

Latest commit

 

History

History
77 lines (54 loc) · 2.07 KB

File metadata and controls

77 lines (54 loc) · 2.07 KB

memccpy

  • 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

処理系

関連項目

  • memcpy: メモリデータをコピーする
  • memmove: メモリデータをコピーする(領域重複可)

参照