شرح دالة ()memset في لغة سي بالأمثلة
28 Jun 2020
تُستخدم دالة ()memset لملء حجرة من الذاكرة بقيمة محددة.
صيغة الدالة:
void *memset(void *ptr, int x, size_t n);
حيث يشير:
-
ptr إلى عنوان بداية الذاكرة المطلوب ملؤها
-
x القيمة التي سيتم الملء بها
-
n عدد البايتات التي سيتم ملؤها بدءًا من العنوان ptr
ولاحظ أن ptr هو مؤشر (pointer) من نوع void وبالتالي يمكن تمرير مؤشر من أي نوع في هذه الدالة.
لنلقِ نظرة الآن على مثال بسيطة لتوضيح عمل الدالة ()memset:
الناتج:
Before memset(): GeeksForGeeks is for programming geeks.
After memset(): GeeksForGeeks........programming geeks.
التوضيح: تشير (str + 13) إلى بداية الموضع الذي نريد تغيير قيمته. بعبارة أخرى، كتبنا في البداية str وهو بداية عنوان الجملة التي لدينا في الذاكرة عمومًا، ثم +13 أي نبدأ من أول حرف في الجملة وبعد 13 خانة (حرف) نبدأ بتغيير القيم للنقظة “.”، يستمر وضع النقط لثمان خانات فقط، ونلاحظ أن رقم ثمانية مضروب بحجم الـ char ولكن كون حجم الـ char هو 1 بايت فيبقى الرقم هو 8. وفي النهاية نحصل على الناتج أعلاه.
مثال آخر:
الناتج
0 0 0 0 0 0 0 0 0 0
تمرين
قم بتخمين ناتج البرنامج التالي:
لاحظ أن الكود أعلاه لا يضبط قيم المصفوفة على القيمة 10 وذلك ﻷن طريقة ضبط memset هو حرف حرف وأن ال integer يحوي أكثر من بايت واحد (حرف واحد) (حيث الـ integer هو 4 بايت في الذاكرة)
ولكن إذا استبدلنا رقم 10 بـ 1- فسنحصل على قيم 1- ﻷن تمثيل العدد 1- يحوي بالكامل على واحدات (1s) في كلا حالتي الـ char والـ int.
هذه المقالة مترجمة وبتصرّف. يرجى الاطلاع على المصدر