استخدام strcpy()
جزء من قسم Logic & Flow في رحلة C على Coddy — الدرس 16 من 63.
لقد تعلمت كيفية إيجاد طول السلاسل النصية باستخدام strlen()، ولكن ماذا لو كنت بحاجة إلى نسخ محتويات سلسلة نصية إلى أخرى؟ في لغة C، لا يمكنك استخدام عامل التعيين (=) لنسخ السلاسل النصية كما تفعل مع المتغيرات العادية.
السبب هو أن السلاسل النصية هي مصفوفات من الأحرف، وعندما تستخدم = مع المصفوفات، فأنت تقوم فقط بنسخ عنوان الذاكرة، وليس المحتوى الفعلي. وهنا تصبح دالة strcpy() من مكتبة <string.h> ضرورية.
#include <stdio.h>
#include <string.h>
char source[] = "Hello";
char destination[20];
strcpy(destination, source); // ينسخ "Hello" إلى destinationتأخذ الدالة strcpy() وسيطين: مصفوفة الوجهة (التي تريد النسخ إليها) وسلسلة المصدر (التي تريد نسخها). وهي تقوم بنسخ كل حرف من المصدر إلى الوجهة، بما في ذلك الحرف النهائي الفارغ (null terminator).
من الضروري أن تكون المصفوفة الوجهة (destination array) كبيرة بما يكفي لاستيعاب السلسلة النصية المصدر بالكامل بالإضافة إلى حرف الإنهاء الفارغ (null terminator). إذا كانت الوجهة صغيرة جداً، فإن الدالة strcpy() ستكتب خارج حدود المصفوفة، مما يتسبب في سلوك غير محدد.
تعد هذه الدالة أساسية لمعالجة السلاسل النصية في لغة C، مما يتيح لك تكرار السلاسل النصية، وتهيئة متغيرات السلاسل النصية بمحتوى موجود، وإعداد السلاسل النصية لمزيد من المعالجة.
التحدي
سهلاكتب برنامجاً بلغة C يوضح عملية نسخ السلاسل النصية باستخدام الدالة strcpy(). يجب على برنامجك القيام بما يلي:
- قراءة عدد صحيح
nيمثل عدد عمليات السلاسل النصية التي سيتم إجراؤها - لكل عملية:
- قراءة سلسلة نصية مصدر (source string) من الإدخال
- الإعلان عن مصفوفة أحرف تسمى
destinationتحتوي على 100 عنصر - استخدام
strcpy()لنسخ السلسلة المصدر إلى مصفوفة الوجهة (destination array) - طباعة كل من السلسلة المصدر الأصلية وسلسلة الوجهة المنسوخة
- بعد الانتهاء من جميع العمليات، أثبت أن السلاسل المنسوخة مستقلة عن طريق:
- تعديل الحرف الأول من آخر مصفوفة وجهة (destination array) إلى 'X'
- طباعة سلسلة الوجهة المعدلة لإظهار أنها قد تغيرت
تذكر تضمين ملف الترويسة <string.h> لاستخدام الدالة strcpy().
يجب أن يعرض مخرجك النتائج بالتنسيق التالي:
Source: [source_string]
Destination: [copied_string]
Source: [source_string]
Destination: [copied_string]
...
Modified last destination: [modified_string]على سبيل المثال، إذا كان الإدخال هو:
3
hello
world
programmingيجب أن يكون مخرجك:
Source: hello
Destination: hello
Source: world
Destination: world
Source: programming
Destination: programming
Modified last destination: Xrogrammingيختبر هذا التحدي فهمك لاستخدام strcpy() لنسخ محتويات السلسلة النصية من مصفوفة أحرف إلى أخرى، والتخصيص الصحيح للذاكرة لمصفوفات الوجهة، ويوضح أن السلاسل المنسوخة مستقلة عن مصادرها.
ورقة مرجعية
لنسخ السلاسل النصية في لغة C، استخدم strcpy() من مكتبة <string.h>. لا يمكنك استخدام معامل التعيين (=) لنسخ السلاسل النصية لأنه ينسخ عناوين الذاكرة فقط، وليس المحتوى الفعلي.
#include <stdio.h>
#include <string.h>
char source[] = "Hello";
char destination[20];
strcpy(destination, source); // ينسخ "Hello" إلى destinationتأخذ الدالة strcpy() وسيطين: مصفوفة الوجهة (المكان الذي تريد النسخ إليه) والسلسلة المصدر (ما تريد نسخه). تقوم بنسخ كل حرف من المصدر إلى الوجهة، بما في ذلك الحرف النهائي الفارغ (null terminator).
يجب أن تكون مصفوفة الوجهة كبيرة بما يكفي لاستيعاب السلسلة المصدر بالكامل بالإضافة إلى الحرف النهائي الفارغ لتجنب السلوك غير المحدد.
جرّب بنفسك
#include <stdio.h>
#include <string.h>
int main() {
int n;
scanf("%d", &n);
char source[100];
char destination[100];
// TODO: اكتب كودك هنا
// استخدم حلقة لمعالجة n من عمليات السلاسل النصية
// لكل عملية:
// - اقرأ السلسلة المصدر (source string)
// - استخدم strcpy() لنسخ المصدر إلى الوجهة (destination)
// - اطبع كلا السلسلتين بالتنسيق المطلوب
// TODO: بعد الحلقة، قم بتعديل الحرف الأول من آخر سلسلة وجهة (destination)
// واطبع السلسلة المعدلة
return 0;
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1أساسيات المؤشرات
ما هو المؤشر؟الإعلان عن المؤشراتعامل العنوان (&)عامل إلغاء المرجعية (*)مؤشرات NULLمراجعة: أساسيات المؤشرات4مشروع: أداة نصوص بسيطة
نظرة عامة على المشروععد الأحرف2المؤشرات والمصفوفات
أسماء المصفوفات كمؤشراتعناصر المصفوفة - المؤشراتالعمليات الحسابية على المؤشراتمقارنة المؤشراتمراجعة: التنقل في المصفوفة باستخدام المؤشرات5المؤشرات والدوال
التمرير بالقيمةتمرير المؤشرات إلى الدوالتعديل المتغيرات عبر المؤشراتمثال كلاسيكي: التبديلتمرير المصفوفات إلى الدوالملخص: وسائط المؤشرات في الدوال8الهياكل والمؤشرات
المؤشرات إلى الهياكلعامل السهم (->)تمرير الهياكل بالقيمةتمرير مؤشرات الهياكلالتخصيص الديناميكي للهياكلمراجعة: تعديل الهياكل باستخدام المؤشرات11تحديات المراجعة النهائية
مراجعة: دمج السلاسل النصية الديناميكيمراجعة: مصفوفة من الـ Structsمراجعة: عداد تكرار الكلمات3مصفوفات الأحرف والسلاسل النصية
السلاسل النصية كمصفوفات charالمُنهي الصفري (Null Terminator)إدخال السلاسل النصية باستخدام scanfاستخدام strlen()استخدام strcpy()استخدام strcat()استخدام strcmp()مراجعة: دوال السلاسل النصية الأساسية