Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

استخدام 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، مما يتيح لك تكرار السلاسل النصية، وتهيئة متغيرات السلاسل النصية بمحتوى موجود، وإعداد السلاسل النصية لمزيد من المعالجة.

challenge icon

التحدي

سهل

اكتب برنامجاً بلغة C يوضح عملية نسخ السلاسل النصية باستخدام الدالة strcpy(). يجب على برنامجك القيام بما يلي:

  1. قراءة عدد صحيح n يمثل عدد عمليات السلاسل النصية التي سيتم إجراؤها
  2. لكل عملية:
    • قراءة سلسلة نصية مصدر (source string) من الإدخال
    • الإعلان عن مصفوفة أحرف تسمى destination تحتوي على 100 عنصر
    • استخدام strcpy() لنسخ السلسلة المصدر إلى مصفوفة الوجهة (destination array)
    • طباعة كل من السلسلة المصدر الأصلية وسلسلة الوجهة المنسوخة
  3. بعد الانتهاء من جميع العمليات، أثبت أن السلاسل المنسوخة مستقلة عن طريق:
    • تعديل الحرف الأول من آخر مصفوفة وجهة (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;
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow