English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دليل تعليمي بلغة C الأساسية

تحكم في العملية بلغة C

الوظائف في لغة C

العدد في لغة C

الإشارات في لغة C

النصوص في لغة C

مكتبة بنية لغة C

ملف لغة C

C أخرى

دليل مرجع لغة C

طريقة استخدام دالة مكتبة C vsprintf() ومثال

مكتبة C - <stdio.h>

دالة مكتبة C int vsprintf(char *str, const char *format, va_list arg) إرسال输出来 إلى نص باستخدام قائمة المعلمات.

بيان

هذا هو بيان دالة vsprintf().

int vsprintf(char *str, const char *format, va_list arg)

معامل

  • str -- هذا هو دليل إلى مصفوفة من الحروف، تحتوي على سلسلة من الحروف C.
  • format -- هذا هو السلسلة، يحتوي على النص الذي سيتم كتابته في السلسلة str. يمكن أن يحتوي على علامات format المدمجة، التي يمكن استبدالها بالقيم المحددة في المعاملات اللاحقة وتنسيقها حسب الحاجة. خصائص علامة format هي %[flags][width][.dقة][طول]specifier،حيث سيتم شرح ذلك بالتفصيل كما يلي:
specifier (محدد)إخراج
cحرف
d أو iعدد عشري معين
eاستخدام e للعديد العلمي (الرقم الموجود والمعامل)
Eاستخدام E للعديد العلمي (الرقم الموجود والمعامل)
fعدد عشري
gاختيار التمثيل المناسب بين %e أو %f تلقائيًا
Gاختيار التمثيل المناسب بين %E أو %f تلقائيًا
oعشري معين
sسلسلة من الحروف
uعدد عشري غير معين
xعدد عشري غير معين
Xعدد عشري غير معين (أحرف كبيرة)
pعنوان الإشارة
nلا يتم إخراج أي شيء
%حرف

flags (علامات)الوصف
-توجيه الحقل المحدد إلى اليسار، بشكل افتراضي يتم توجيهه إلى اليمين (انظر شرح sub-suffix width).
+إجبار على عرض إشارة إضافية أو ناقصية (+ أو -) قبل النتيجة، أي سيتم عرض إشارة + أمام الأرقام الإيجابية. بشكل افتراضي، سيتم عرض إشارة - فقط أمام الأرقام السلبية.
(مسافة)إذا لم يتم كتابة أي رمز، سيتم إدراج مسافة أمام القيمة.
#عند استخدامه مع o، x أو X specifier، سيتم عرض 0، 0x أو 0X أمام القيم غير الصفرية.
عند استخدامه مع e، E و f، سيتم إجبار النتيجة على تحتوي على نقطة عشرية، حتى لو لم يكن هناك أي أرقام بعد النقطة العشرية. بشكل افتراضي، إذا لم يكن هناك أي أرقام بعد النقطة العشرية، لن يتم عرض النقطة العشرية.
عند استخدامه مع g أو G، النتيجة ستكون نفسها كما عند استخدامه مع e أو E، ولكن لن يتم إزالة الصفر في نهاية.
0وضع صفر (0) على يسار الرقم المحدد للملء padding، بدلاً من المسافات (انظر شرح sub-suffix width).

عرض (width)الوصف
(رقم)عدد الأحرف التي سيتم إخراجها. إذا كان القيمة المخرجة أقصر من هذا الرقم، سيتم تعبئة النتيجة بالمسافات. إذا كانت القيمة المخرجة أطول من هذا الرقم، لن يتم قطع النتيجة.
*عرض في سلسلة format لم يتم تحديده، ولكن سيتم وضع قيمة الصفحة الكاملة كمعامل إضافي قبل المعاملات التي سيتم تنسيقها.

.dقة (الدقة)الوصف
.numberبالنسبة لنوع الأعداد الصحيحة (d،i،o،u،x،X): يحدد الدقة عدد الأرقام التي سيتم كتابتها من القيمة. إذا كان العدد القابل للكتابة أقل من هذا الرقم، سيتم تعبئة النتيجة بمقدمات صفر. إذا كان العدد القابل للكتابة أطول من هذا الرقم، لن يتم قطع النتيجة. إذا كانت الدقة 0، فإنه لا يتم كتابة أي حرف.
بالنسبة لنوع e و E و f: عدد الأرقام بعد نقطة العشرية.
بالنسبة لنوع g و G: عدد الأرقام الممكنة التي سيتم إخراجها.
بالنسبة لنوع s: عدد الأحرف التي سيتم إخراجها. بشكل افتراضي، سيتم إخراج جميع الأحرف حتى تُواجه حرف النهاية الـ نود.
بالنسبة لنوع c: لا يؤثر على أي شيء.
عند عدم تحديد أي دقة، تكون القيمة الافتراضية 1. إذا لم تُحدد بوضوح، يتم افتراضها كـ 0.
.*الدقة لم تُحدد في سلسلة التنسيق format، ولكن سيتم وضعها كمعامل إضافي كامل قبل المعامل الذي سيتم تنسيقه.

الطول (الطول)الوصف
hيفسر المعامل كعدد قصير أو عدد قصير غير سالب (يستخدم فقط في وصف الأعداد الصحيحة: i،d،o،u،x و X).
lيفسر المعامل كعدد طويل أو عدد طويل غير سالب، ويستخدم في وصف الأعداد الصحيحة (i،d،o،u،x و X) وأيضاً في وصف c (يُمثل حرف واسع) و s (يُمثل سلسلة من الحروف الواسعة).
Lيفسر المعامل كعدد ثنائي طويل (يستخدم فقط في وصف الأعداد العشرية: e،E،f،g و G).
  • النوع -- هو كائن يمثل قائمة من المتغيرات المتغيرة. يجب إعداد هذا الكائن باستخدام ماكرو va_start المحدد في <stdarg>.

القيمة المعدة

إذا كانت النتيجة ناجحة، فإنها تعود عدد الأحرف المكتوبة، وإلا تعود قيمة سلبية.

مثال عبر الإنترنت

هذا المثال يوضح استخدام وظيفة vsprintf().

#include <stdio.h>
#include <stdarg.h>
char buffer[80];
int vspfunc(char *format, ...)
{
   va_list aptr;
   int ret;
   va_start(aptr, format);
   ret = vsprintf(buffer, format, aptr);
   va_end(aptr);
   return(ret);
}
int main()
{
   int i = 5;
   float f = 27.0;
   char str[50] = "oldtoolbag.com";
   vspfunc("%d %f %s", i, f, str);
   printf("%s\n", buffer);
   return(0);
}

لنقوم بترميز وتشغيل البرنامج أعلاه، مما سيؤدي إلى نتائج التالي:

5 27.000000 oldtoolbag.com

مكتبة C - <stdio.h>