मैं 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