سؤال

ولقد قرأت رؤوس ظيفة، ولكن ما زلت غير متأكد بالضبط ما الفرق من حيث حالات الاستخدام.

هل كانت مفيدة؟

المحلول

وmemcpy() نسخ من مكان إلى آخر. memset() فقط يضع كل قطعة من الذاكرة إلى نفس القيمة.

مثال:

memset(str, '*', 50);   

وخط أعلاه يضع الأحرف 50 الأولى من شارع السلسلة ل* (أو أيا كان الحجة الثانية من memset).

memcpy(str2, str1, 50); 

وخط النسخ المذكورة أعلاه الأحرف الأولى 50 من str1 إلى str2.

نصائح أخرى

و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() بايت بين الذاكرة. هذا النوع من البيانات التي يتم نسخها غير ذي صلة، فإنه يجعل من مجرد نسخ بايت مقابل بايت.

وmemset ملء <م> الذاكرة مع بايت المستمر

وباطل * memset (باطل * ق، ج كثافة العمليات، ن size_t)؛

واستخدام memset هو مبرمج يمكن أن تملأ مباشرة مع الذاكرة وجه الخصوص. واستخدامات memcpy <م> ثابت مؤشر باطلا مصدر التي لا يمكن تغييرها.

وmemcpy نسخ <م> الذاكرة منطقة

وباطل * memcpy (* باطل دست، CONST باطل * SRC، ن size_t)؛

memcpy            memset

وmemcpy() نسخ من مكان إلى آخر. memset() فقط يضع كل قطعة من الذاكرة إلى نفسه.

وعلى سبيل المثال هنا يحدد طول سلسلة من شارع السلسلة ل* (أو أيا كان الحجة الثانية من memset).

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

وهنا نسخ طول سلسلة من SRC سلسلة لدست.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top