strcmp(3)

الاسم
strcmp, strncmp - مقارنة سلسلتي محارف

المكتبة
مكتبة سي المعيارية (libc، -lc)

موجز
#include <string.h>

int strcmp(const char *s1, const char *s2);
int strncmp(const char s1[], const char s2[], size_t n);

الوصف

strcmp()
    تقارن الدالة strcmp() سلسلتي المحارف s1 و s2، كما لو كانت تستدعي memcmp(3).

    لا يُؤخذ الإعداد المحلي في الاعتبار (لمقارنة تراعي الإعداد المحلي، انظر strcoll(3)).

    يكافئ

        memcmp(s1, s2, MIN(strlen(s1),strlen(s2))+1)

strncmp()
    الدالة strncmp() مماثلة، إلا أنها تقارن فقط أول (على الأكثر) n بايت من s1 و s2.

    يكافئ

        memcmp(s1, s2, MIN(MIN(strnlen(s1,n),strnlen(s2,n))+1, n))

قيمة الإرجاع
ترجع الدالتان strcmp() و strncmp() عددًا صحيحًا أقل من الصفر، أو مساويًا له، أو أكبر منه إذا وُجد أن s1 (أو أول n بايت منها) أقل من s2، أو مطابقًا له، أو أكبر منه، على التوالي.

السمات
للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر attributes(7).
الواجهة | السمة | القيمة
strcmp(), strncmp() | سلامة الخيوط | MT-Safe

الإصدارات
يحدد POSIX.1 فقط ما يلي:

    يُحدد إشارة قيمة الإرجاع غير الصفرية بإشارة الفرق بين قيم أول زوج من البايتات (كلاهما يُفسر كنوع unsigned char) يختلفان في السلاسل التي تُقارن.

في glibc، كما في معظم التطبيقات الأخرى، قيمة الإرجاع هي النتيجة الحسابية لطرح آخر بايت تمت مقارنته في s2 من آخر بايت تمت مقارنته في s1. (إذا كان الحرفان متساويين، فإن هذا الفرق هو 0.)

المعايير
C11, POSIX.1-2008.

التاريخ
POSIX.1-2001، C89، SVr4، 4.3BSD.

أمثلة
يمكن استخدام البرنامج أدناه لتوضيح عمل strcmp() (عند إعطائه وسيطين) و strncmp() (عند إعطائه ثلاث وسائط). أولاً، بعض الأمثلة باستخدام strcmp():

    $ ./string_comp ABC ABC;
    <str1> و <str2> متساويان
    $ ./string_comp ABC AB;      # 'C' هو ASCII 67; 'C' - '\0' = 67
    <str1> أكبر من <str2> (67)
    $ ./string_comp ABA ABZ;     # 'A' هو ASCII 65; 'Z' هو ASCII 90
    <str1> أصغر من <str2> (-25)
    $ ./string_comp ABJ ABC;
    <str1> أكبر من <str2> (7)
    $ ./string_comp $'\201' A;   # 0201 - 0101 = 0100 (أو 64 عشريًا)
    <str1> أكبر من <str2> (64)

يستخدم المثال الأخير بناء جملة خاصًا بـ bash(1) لإنتاج سلسلة محارف تحتوي على رمز ASCII 8-بت؛ تُظهر النتيجة أن مقارنة السلاسل تستخدم محارف غير مُوقَّعة.

ثم بعض الأمثلة باستخدام strncmp():

    $ ./string_comp ABC AB 3;
    <str1> أكبر من <str2> (67)
    $ ./string_comp ABC AB 2;
    <str1> و <str2> متساويان في أول 2 بايت

  مصدر البرنامج
    /* string_comp.c

       مرخص بموجب رخصة جنو العمومية العامة الإصدار 2 أو الأحدث.
    */
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    int
    main(int argc, char *argv[])
    {
        int res;

        if (argc < 3) {
            fprintf(stderr, "الاستخدام: %s <str1> <str2> [<n>]\n", argv[0]);
            exit(EXIT_FAILURE);
        }

        if (argc == 3)
            res = strcmp(argv[1], argv[2]);
        else
            res = strncmp(argv[1], argv[2], atoi(argv[3]));

        if (res == 0) {
            printf("<str1> و <str2> متساويان");
            if (argc > 3)
                printf(" في أول %d بايت\n", atoi(argv[3]));
            printf("\n");
        } else if (res < 0) {
            printf("<str1> أصغر من <str2> (%d)\n", res);
        } else {
            printf("<str1> أكبر من <str2> (%d)\n", res);
        }

        exit(EXIT_SUCCESS);
    }

انظر أيضًا
memcmp(3), strcasecmp(3), strcoll(3), streq(3), string(3), strncasecmp(3), strverscmp(3), wcscmp(3), wcsncmp(3), ascii(7)

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.