البرمجة

تعلم طباعة ملفات النص في لغة C

في البداية، يجب أن نلاحظ أن هناك عدة أخطاء في الكود تؤدي إلى عدم طباعة الملف النصي المطلوب بشكل صحيح. سأقوم بشرح هذه الأخطاء وتوجيهك لتصحيحها:

  1. تعريف الحد الأقصى للطول MAXBUFLEN:
    يجب أن تضع علامة التنصيص المزدوجة حول MAXBUFLEN. يجب تعريف المتغير باستخدام الكلمة الرئيسية #define لاستبدال جميع الحالات في الكود.

  2. التحقق من فتح الملف بشكل صحيح:
    في الشرط if (fopen(argv[1], "r") != NULL)، لم تقم بتخزين الناتج من fopen في متغير. عليك أن تخزن الناتج في مؤشر لملف FILE* لتتمكن من استخدامه لاحقًا في الكود.

  3. قراءة الملف وطباعته:
    استخدمت دالة fread لقراءة الملف إلى source، ولكن لم تستخدمها لطباعة المحتوى. بدلاً من ذلك، استخدمت دالة getc لقراءة وطباعة الملف. يمكنك استخدام أحد الطريقين، ولكن عليك التأكد من استخدام الأسلوب بشكل صحيح.

الآن، دعني أقدم لك الكود المعدل مع تصحيح الأخطاء المذكورة:

c
#include #define MAXBUFLEN 4096 int main(int argc, char *argv[]) { int badReturnValue = -1; char* error = "Error! trying to open the file "; if (argc != 2) { printf("Please supply a file.\n"); return badReturnValue; } FILE *fp = fopen(argv[1], "r"); /* "r" = open for reading */ if (fp == NULL) { printf("%s%s\n", error, argv[1]); return badReturnValue; } char source[MAXBUFLEN + 1]; size_t newLen = fread(source, sizeof(char), MAXBUFLEN, fp); if (ferror(fp) != 0) { printf("%s%s\n", error, argv[1]); return badReturnValue; } source[newLen++] = '\0'; // Null-terminate the string printf("%s", source); fclose(fp); printf("Finish.\n"); return 0; }

هذا الكود الآن يقوم بفتح الملف وقراءته وطباعة محتواه بشكل صحيح. تأكد من تضمين #include في بداية الكود لتمكين استخدام دوال مكتبة الإدخال/الإخراج القياسية في C.

إذا كانت لديك أي استفسارات إضافية أو تحتاج إلى مساعدة بشأن أي شيء آخر، فلا تتردد في طرحها!

المزيد من المعلومات

بالطبع! سأقدم لك المزيد من المعلومات حول الكود وكيفية عمله:

  1. تعريف MAXBUFLEN:
    يُستخدم تعريف MAXBUFLEN لتحديد حجم الذاكرة المخصصة لتخزين المحتوى المقروء من الملف. في هذا الكود، تم تعيين قيمة MAXBUFLEN إلى 4096، وهذا يعني أن المتغير source يمكنه تخزين حتى 4096 حرف.

  2. المعالجة الشرطية:
    في الجزء الأول من الكود، يتم التحقق من عدد الوسائط التي يتم تمريرها إلى البرنامج. إذا كان العدد غير 2 (وهو عبارة عن اسم البرنامج واسم الملف)، يتم طباعة رسالة توجيهية تخبر المستخدم بضرورة توفير اسم الملف كواحدة من الوسائط.

  3. فتح الملف:
    يتم استخدام دالة fopen لفتح الملف بوضع القراءة فقط “r”، حيث يتم تخزين المؤشر الذي تم إرجاعه في متغير fp. إذا فشلت عملية فتح الملف (يُعاد NULL)، يتم طباعة رسالة خطأ.

  4. قراءة وطباعة الملف:
    بعد فتح الملف بنجاح، يتم استخدام دالة fread لقراءة الملف إلى المتغير source. ثم يتم طباعة محتوى الملف باستخدام printf. يتم استخدام fread بدلاً من getc لقراءة الملف كله دفعة واحدة إلى الذاكرة المؤقتة، وهذا يمكن أن يكون أكثر فعالية للملفات الكبيرة.

  5. تصفية الموارد:
    يُغلق الملف باستخدام fclose بمجرد الانتهاء من استخدامه. هذا يعتبر ممارسة جيدة لتحرير الموارد وتجنب تسريب الذاكرة.

  6. رمز العودة:
    يتم إرجاع قيمة 0 في نهاية الدالة main للإشارة إلى أن البرنامج تم تنفيذه بنجاح.

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

مقالات ذات صلة

زر الذهاب إلى الأعلى

هذا المحتوى محمي من النسخ لمشاركته يرجى استعمال أزرار المشاركة السريعة أو تسخ الرابط !!