문제

기능 헤더를 읽었지만 사용 사례 측면에서 차이가 정확히 무엇인지 확실하지 않습니다.

도움이 되었습니까?

해결책

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() 메모리 사이에 바이트를 복사합니다. 복사되는이 유형의 데이터는 관련이 없으며 바이트를 바이트로 사본으로 만듭니다.

멤 세트 채우기 메모리 일정한 바이트로

void *memset (void *s, int c, size_t n);

Memset의 사용은 프로그래머가 특히 메모리를 직접 채울 수 있습니다. 그리고 memcpy를 사용합니다 끊임없는 변경할 수없는 소스에 대한 공간 포인터.

memcpy copy 메모리 지역

void *memcpy (void *dest, const void *src, size_t n);

참조 memcpy

memcpy() 한 곳에서 다른 곳으로 사본. memset() 모든 메모리 조각을 동일하게 설정합니다.

예를 들어 여기서 문자열 str의 문자열 길이를 * (또는 memset의 두 번째 인수)로 설정합니다.

memset(str, '*', strlen(str)+1);   

여기서 문자열 src의 문자열 길이를 dest로 복사합니다.

memcpy(dest, src, strlen(src)+1);

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top