c - example - printf شرح



كيف يمكنني طباعة سلسلة غير فارغة باستخدام printf؟ (2)

كيف يمكنني طباعة سلسلة غير نهائية باستخدام printf ، على افتراض أنني أعرف طول السلسلة في وقت التشغيل؟

https://src-bin.com


Answer #1

الإجابة المقدمة منKennyTM رائعة ، ولكن بدقة فائقة.

بشكل عام ، إذا كانت السلسلة غير فارغة "منتهية" ، لكن لها حرفًا فارغًا في الوسط ، printf("%.*s", length, string); لا يعمل كما هو متوقع. وذلك لأن سلسلة التنسيق %.*s تطلب من printf طباعة أقصى عدد ممكن من الأحرف ، وليس أحرف length بالضبط .

أفضل استخدام الحل العام الذي أشار إليهWilliam Pursell في تعليق تحت البروتوكول الاختياري:

fwrite(string, sizeof(char), length, stdout);

إليك نموذج التعليمات البرمجية:

#include <stdio.h>

int main(void) {
    size_t length = 5;

    char string[length];
    string[0] = 'A';
    string[1] = 'B';
    string[2] = 0;        // null character in the middle
    string[3] = 'C';
    string[4] = 'D';

    printf("With printf: %.*s\n", length, string);
    printf("With fwrite: ");
    fwrite(string, sizeof(char), length, stdout);
    printf("\n");

    return 0;
}

انتاج:

With printf: AB
With fwrite: AB CD

Answer #2
printf("%.*s", length, string);

استخدم مع الحجج الأخرى:

printf("integer=%d, string=%.*s, number=%f", integer, length, string, number);
//                         ^^^^                       ^^^^^^^^^^^^^^

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

لاحظ أن هذا يفترض أن string لا تحتوي على أي بايتات فارغة داخلية (\ 0) ، لأن %.123s يقيد فقط الحد الأقصى للطول وليس الطول الدقيق ، ولا تزال السلاسل تعامل على أنها خالية من العناصر الفارغة.

إذا كنت ترغب في طباعة سلسلة غير منتهية بقيمة خالية داخل خالية ، لا يمكنك استخدام printf واحد. استخدم fwrite بدلاً من ذلك:

fwrite(string, 1, length, stdout);

انظر إجابة MSDousti للحصول على شرح مفصل.





printf