Namespaces
Variants

std:: memset

From cppreference.net
헤더 파일에 정의됨 <cstring>
void * memset ( void * dest, int ch, std:: size_t count ) ;

static_cast < unsigned char > ( ch ) dest 가 가리키는 객체의 첫 count 개 문자 각각에 복사합니다. 객체가 잠재적으로 중첩되는 부분 객체 이거나 TriviallyCopyable (예: 스칼라, C 호환 구조체, 사소하게 복사 가능한 타입의 배열)이 아닌 경우, 동작은 정의되지 않습니다. count dest 가 가리키는 객체의 크기보다 큰 경우, 동작은 정의되지 않습니다.

목차

매개변수

dest - 채울 객체를 가리키는 포인터
ch - 채우기 바이트
count - 채울 바이트 수

반환값

dest

참고 사항

std::memset 는 이 함수에 의해 수정된 객체가 수명 동안 다시 접근되지 않는 경우 (예: gcc 버그 8537 ) as-if 규칙에 따라 최적화되어 제거될 수 있습니다. 이러한 이유로 이 함수는 메모리를 소거하는 데 (예: 비밀번호를 저장했던 배열을 0으로 채우는 작업) 사용할 수 없습니다.

해당 문제에 대한 해결책으로는 volatile 포인터와 함께 std::fill 사용, (C23) memset_explicit() , (C11) memset_s , FreeBSD의 explicit_bzero 또는 Microsoft의 SecureZeroMemory 등이 있습니다.

예제

#include <bitset>
#include <climits>
#include <cstring>
#include <iostream>
int main()
{
    int a[4];
    using bits = std::bitset<sizeof(int) * CHAR_BIT>;
    std::memset(a, 0b1111'0000'0011, sizeof a);
    for (int ai : a)
        std::cout << bits(ai) << '\n';
}

출력:

00000011000000110000001100000011
00000011000000110000001100000011
00000011000000110000001100000011
00000011000000110000001100000011

참고 항목

한 버퍼를 다른 버퍼로 복사
(함수)
한 버퍼를 다른 버퍼로 이동
(함수)
주어진 와이드 문자를 와이드 문자 배열의 모든 위치에 복사
(함수)
주어진 값을 범위 내 모든 요소에 복사 할당
(함수 템플릿)
주어진 값을 범위 내 N개 요소에 복사 할당
(함수 템플릿)
타입이 trivially copyable인지 확인
(클래스 템플릿)
C 문서 for memset