std:: memset
|
헤더 파일에 정의됨
<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개 요소에 복사 할당
(함수 템플릿) |
|
|
(C++11)
|
타입이 trivially copyable인지 확인
(클래스 템플릿) |
|
C 문서
for
memset
|
|