मैं memcpy()और के बीच के अंतर को समझने की कोशिश कर रहा हूं memmove(), और मैंने उस पाठ को पढ़ा memcpy()है जो ओवरलैपिंग स्रोत और गंतव्य का ध्यान नहीं रखता memmove()है।
हालाँकि, जब मैं इन दो कार्यों को ओवरलैपिंग मेमोरी ब्लॉक पर निष्पादित करता हूं, तो वे दोनों एक ही परिणाम देते हैं। उदाहरण के लिए, memmove()मदद पृष्ठ पर निम्नलिखित MSDN उदाहरण लें : -
क्या कमियां समझने का एक बेहतर उदाहरण है memcpyऔर memmoveयह कैसे हल करता है?
// crt_memcpy.c
// Illustrate overlapping copy: memmove always handles it correctly; memcpy may handle
// it correctly.
#include <memory.h>
#include <string.h>
#include <stdio.h>
char str1[7] = "aabbcc";
int main( void )
{
printf( "The string: %s\n", str1 );
memcpy( str1 + 2, str1, 4 );
printf( "New string: %s\n", str1 );
strcpy_s( str1, sizeof(str1), "aabbcc" ); // reset string
printf( "The string: %s\n", str1 );
memmove( str1 + 2, str1, 4 );
printf( "New string: %s\n", str1 );
}
आउटपुट:
The string: aabbcc
New string: aaaabb
The string: aabbcc
New string: aaaabb
memcpyयह है assertकि क्षेत्र जानबूझकर आपके कोड में बग को कवर करने के बजाय ओवरलैप नहीं करते हैं।
The string: aabbcc New string: aaaaaa The string: aabbcc New string: aaaabb