strdup () - ماذا يفعل في C؟


Answers

char * strdup(const char * s)
{
  size_t len = 1+strlen(s);
  char *p = malloc(len);

  return p ? memcpy(p, s, len) : NULL;
}

ربما يكون الرمز أسرع قليلاً من strcpy() حيث أن char \0 لا يحتاج إلى البحث مرة أخرى (لقد كان بالفعل مع strlen() ).

Question

ما هو الغرض من وظيفة strdup() في C؟




strdup () يقوم بتخصيص الذاكرة الديناميكية لصفيف الأحرف بما في ذلك الحرف end \ '' ويعيد عنوان ذاكرة الكومة:

char *strdup (const char *s)
{
    char *p = malloc (strlen (s) + 1);   // allocate memory
    if (p != NULL)
        strcpy (p,s);                    // copy string
    return p;                            // return the memory
}

لذا ، فإن ما يفعله هو أن يعطينا سلسلة أخرى مماثلة للسلسلة التي قدمتها حجته ، دون أن يطلب منا تخصيص الذاكرة. ولكننا ما زلنا بحاجة إلى تحريرها لاحقًا.




الدالة strdup () هي اختصار لسلسلة مكررة ، وتستغرق في معلمة كسلسلة ثابت أو سلسلة حرفية وتخصص مساحة كافية فقط للسلسلة وتكتب الأحرف المقابلة في المساحة المخصصة وتعيد عنوان العنوان المخصص في النهاية. الفضاء لروتين الدعوة.




إنه strcpy(ptr2, ptr1) بسيط strcpy(ptr2, ptr1) يساوي while(*ptr2++ = *ptr1++)

حيث أن: strdup مساوية لـ

ptr2 = malloc(strlen(ptr1)+1);

strcpy(ptr2,ptr1);

إذا كنت ترغب في استخدام السلسلة التي قمت بنسخها لاستخدامها في وظيفة أخرى (كما تم إنشاؤه في قسم الكومة) يمكنك استخدام strdup ، وإلا فإن strcpy كافي




من رجل strdup :

يجب أن ترجع الدالة strdup() مؤشرًا إلى سلسلة جديدة ، وهي نسخة مكررة من السلسلة المشار إليها بواسطة s1 . يمكن تمرير المؤشر الذي تم إرجاعه إلى free() . يتم إرجاع مؤشر فارغ في حالة تعذر إنشاء السلسلة الجديدة.




Links