std:: memcpy
|
헤더 파일에 정의됨
<cstring>
|
||
|
void
*
memcpy
(
void
*
dest,
const
void
*
src,
std::
size_t
count
)
;
|
||
다음 작업을 순서대로 수행합니다:
- 암시적으로 생성 합니다. dest 에 객체를
- 복사합니다 count 개의 문자를 ( unsigned char 타입처럼) src 가 가리키는 객체에서 dest 가 가리키는 객체로
다음 조건 중 하나라도 충족되면, 동작은 정의되지 않습니다:
- dest 또는 src 가 널 포인터 또는 유효하지 않은 포인터 인 경우.
- 객체 간 복사가 중첩된 영역에서 발생하는 경우.
목차매개변수
반환값적합한 생성된 객체가 있으면 해당 객체에 대한 포인터를 반환하고, 그렇지 않으면 dest 를 반환합니다. 참고 사항
여러 C++ 컴파일러들이 적절한 메모리 복사 루프를
strict aliasing
이 동일한 메모리를 서로 다른 두 타입의 값으로 검사하는 것을 금지하는 경우,
예제
이 코드 실행
#include <cstdint> #include <cstring> #include <iostream> int main() { // 간단한 사용법 char source[] = "once upon a daydream...", dest[4]; std::memcpy(dest, source, sizeof dest); std::cout << "dest[4] = {"; for (int n{}; char c : dest) std::cout << (n++ ? ", " : "") << '\'' << c << "'"; std::cout << "};\n"; // 재해석 double d = 0.1; // std::int64_t n = *reinterpret_cast<std::int64_t*>(&d); // aliasing violation std::int64_t n; std::memcpy(&n, &d, sizeof d); // OK std::cout << std::hexfloat << d << " is " << std::hex << n << " as a std::int64_t\n" << std::dec; // 대상 버퍼에서 객체 생성 struct S { int x{42}; void print() const { std::cout << '{' << x << "}\n"; } } s; alignas(S) char buf[sizeof(S)]; S* ps = new (buf) S; // placement new std::memcpy(ps, &s, sizeof s); ps->print(); } 출력: dest[4] = {'o', 'n', 'c', 'e'};
0x1.999999999999ap-4 is 3fb999999999999a as a std::int64_t
{42}
결함 보고서다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
참고 항목
| |||||||||||||||||||||||||||||||||||