আমি মধ্যে পার্থক্য বুঝতে চেষ্টা করছি memcpy()
এবং memmove()
, এবং আমি যে টেক্সট পড়া আছে memcpy()
ওভারল্যাপিং উৎস যত্ন এবং গন্তব্য লাগবে না যেহেতু memmove()
আছে।
যাইহোক, যখন আমি ওভারল্যাপিং মেমরি ব্লকগুলিতে এই দুটি ফাংশন সম্পাদন করি তখন তারা উভয়ই একই ফলাফল দেয়। উদাহরণস্বরূপ, memmove()
সহায়তা পৃষ্ঠায় নিম্নলিখিত এমএসডিএন উদাহরণটি ধরুন : -
এর অপূর্ণতাগুলি বোঝার জন্য এর চেয়ে ভাল উদাহরণ 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
যে আপনার অঞ্চলগুলিতে ইচ্ছাকৃত আপনার বাগগুলি coveringাকানোর চেয়ে অঞ্চলগুলি ওভারল্যাপ না হয়।
The string: aabbcc New string: aaaaaa The string: aabbcc New string: aaaabb