C의 memset과 memcpy의 차이점은 무엇입니까?
문제
기능 헤더를 읽었지만 사용 사례 측면에서 차이가 정확히 무엇인지 확실하지 않습니다.
해결책
memcpy()
한 곳에서 다른 곳으로 사본. memset()
모든 메모리를 동일한 값으로 설정합니다.
예시:
memset(str, '*', 50);
위의 줄은 문자열 str의 처음 50자를 * (또는 밈의 두 번째 인수)로 설정합니다.
memcpy(str2, str1, 50);
위의 줄은 STR1에서 STR2에서 처음 50자를 복사합니다.
다른 팁
memset()
지정된 버퍼의 모든 바이트를 동일한 값으로 설정하고 memcpy()
다른 장소에서 버퍼로의 바이트 시퀀스를 복사합니다.
char a[4];
memset(a, 7, sizeof(char)*4);
/*
* a is now...
*
* +-+-+-+-+
* |7|7|7|7|
* +-+-+-+-+
*/
char b[] = {1,2,3,4};
char c[4];
memcpy(c, b, sizeof(char)*4);
/*
* c is now...
*
* +-+-+-+-+
* |1|2|3|4|
* +-+-+-+-+
*/
memset
메모리 블록을 단일 값으로 설정합니다. memcpy
블록의 내용을 다른 블록에 복사합니다.
아마도 당신은 그 사이의 차이에 관심이있을 것입니다 memcpy
그리고 memmove
. 둘 다 동일한 작업을 수행하지만 소스와 대상이 겹치더라도 후자는 작동합니다.
memset()
메모리 블록에 모든 바이트를 특정 숯 값으로 설정하는 데 사용됩니다. Memset은 또한 잘 작동합니다 char
초기화 값이므로.
memcpy()
메모리 사이에 바이트를 복사합니다. 복사되는이 유형의 데이터는 관련이 없으며 바이트를 바이트로 사본으로 만듭니다.
memcpy()
한 곳에서 다른 곳으로 사본. memset()
모든 메모리 조각을 동일하게 설정합니다.
예를 들어 여기서 문자열 str의 문자열 길이를 * (또는 memset의 두 번째 인수)로 설정합니다.
memset(str, '*', strlen(str)+1);
여기서 문자열 src의 문자열 길이를 dest로 복사합니다.
memcpy(dest, src, strlen(src)+1);