stpncpy(3)

الاسم
stpncpy, strncpy - ملء مخزن مؤقت بحجم ثابت ببايتات غير فارغة من سلسلة محارف، مع حشو ببايتات فارغة حسب الحاجة

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

موجز
#include <string.h>

char *strncpy(size_t dsize;
              char dst[restrict dsize], const char *restrict src,
              size_t dsize);
char *stpncpy(size_t dsize;
              char dst[restrict dsize], const char *restrict src,
              size_t dsize);

    متطلبات ماكروات اختبار الميزات لـ glibc (انظر feature_test_macros(7)):

stpncpy():
    منذ glibc 2.10:
        _POSIX_C_SOURCE >= 200809L
    قبل glibc 2.10:
        _GNU_SOURCE

الوصف
تنسخ هذه الدوال بايتات غير فارغة من سلسلة المحارف المشار إليها بـ src إلى المصفوفة المشار إليها بـ dst. إذا كان المصدر يحتوي على بايتات غير فارغة قليلة جدًا لملء الوجهة، تقوم الدوال بحشو الوجهة ببايتات فارغة في النهاية. إذا كان المخزن المؤقت للوجهة، المحدود بحجمه، غير كبير بما يكفي لاستيعاب النسخة، فسيتم اقتطاع تسلسل المحارف الناتج. للفرق بين الدالتين، انظر قيمة الإرجاع.

strncpy()
    يكافئ

        stpncpy(dst, src, dsize), dst

stpncpy()
    يكافئ

        memset(mempcpy(dst, src, strnlen(src, dsize)), '\0',
               dsize - strnlen(src, dsize))

قيمة الإرجاع

strncpy()
    تُرجع dst.

stpncpy()
    تُرجع مؤشرًا إلى ما بعد آخر محرف غير فارغ كُتب، أي dest + strnlen(src, n).

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

المعايير

strncpy()
    C11, POSIX.1-2008.

stpncpy()
    POSIX.1-2008.

التاريخ

strncpy()
    C89, POSIX.1-2001, SVr4, 4.3BSD.

stpncpy()
    glibc 1.07. POSIX.1-2008.

تحذيرات
اسم هذه الدوال مضلل. تنتج هذه الدوال تسلسل محارف مُحشو بأصفار، وليس سلسلة محارف (انظر string_copying(7)). على سبيل المثال:

    strncpy(buf, "1", 5);       // { '1',   0,   0,   0,   0 }
    strncpy(buf, "1234", 5);    // { '1', '2', '3', '4',   0 }
    strncpy(buf, "12345", 5);   // { '1', '2', '3', '4', '5' }
    strncpy(buf, "123456", 5);  // { '1', '2', '3', '4', '5' }

من المستحيل التمييز بين الاقتطاع من نتيجة الاستدعاء، وبين تسلسل محارف يناسب المخزن المؤقت للوجهة تمامًا؛ يجب اكتشاف الاقتطاع بمقارنة طول سلسلة المحارف المدخلة مع حجم المخزن المؤقت للوجهة.

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

أمثلة
    #include <err.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    int
    main(void)
    {
        char    *p;
        char    buf1[20];
        char    buf2[20];
        size_t  len;

        if (sizeof(buf2) < strlen("Hello world!"))
            errx("strncpy: truncating character sequence");
        strncpy(buf2, "Hello world!", sizeof(buf2));
        len = strnlen(buf2, sizeof(buf2));

        printf("[len = %zu]: ", len);
        fwrite(buf2, 1, len, stdout);
        putchar('\n');

        if (sizeof(buf1) < strlen("Hello world!"))
            errx("stpncpy: truncating character sequence");
        p = stpncpy(buf1, "Hello world!", sizeof(buf1));
        len = p - buf1;

        printf("[len = %zu]: ", len);
        fwrite(buf1, 1, len, stdout);
        putchar('\n');

        exit(EXIT_SUCCESS);
    }

انظر أيضًا
wcpncpy(3), string_copying(7)

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

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

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