| stpncpy(3) | Library Functions Manual | 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);
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))
قيمة الإرجاع¶
السمات¶
للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر attributes(7).
| الواجهة | السمة | القيمة |
| stpncpy(), strncpy() | سلامة الخيوط | MT-Safe |
المعايير¶
التاريخ¶
تحذيرات¶
اسم هذه الدوال مضلل. تنتج هذه الدوال تسلسل محارف مُحشو بأصفار، وليس سلسلة محارف (انظر 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);
}
انظر أيضًا¶
ترجمة¶
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>
هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.
| 25 فبراير 2026 | صفحات دليل لينكس (لم تصدر بعد) |