في البداية، يجب أن نلاحظ أن هناك عدة أخطاء في الكود تؤدي إلى عدم طباعة الملف النصي المطلوب بشكل صحيح. سأقوم بشرح هذه الأخطاء وتوجيهك لتصحيحها:
-
تعريف الحد الأقصى للطول MAXBUFLEN:
يجب أن تضع علامة التنصيص المزدوجة حول MAXBUFLEN. يجب تعريف المتغير باستخدام الكلمة الرئيسية#define
لاستبدال جميع الحالات في الكود.مقالات ذات صلة-
رسم الصور بدقة باستخدام Swift 201/02/2024
-
التحقق من فتح الملف بشكل صحيح:
في الشرطif (fopen(argv[1], "r") != NULL)
، لم تقم بتخزين الناتج منfopen
في متغير. عليك أن تخزن الناتج في مؤشر لملفFILE*
لتتمكن من استخدامه لاحقًا في الكود. -
قراءة الملف وطباعته:
استخدمت دالة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.
إذا كانت لديك أي استفسارات إضافية أو تحتاج إلى مساعدة بشأن أي شيء آخر، فلا تتردد في طرحها!
المزيد من المعلومات
بالطبع! سأقدم لك المزيد من المعلومات حول الكود وكيفية عمله:
-
تعريف MAXBUFLEN:
يُستخدم تعريفMAXBUFLEN
لتحديد حجم الذاكرة المخصصة لتخزين المحتوى المقروء من الملف. في هذا الكود، تم تعيين قيمةMAXBUFLEN
إلى 4096، وهذا يعني أن المتغيرsource
يمكنه تخزين حتى 4096 حرف. -
المعالجة الشرطية:
في الجزء الأول من الكود، يتم التحقق من عدد الوسائط التي يتم تمريرها إلى البرنامج. إذا كان العدد غير 2 (وهو عبارة عن اسم البرنامج واسم الملف)، يتم طباعة رسالة توجيهية تخبر المستخدم بضرورة توفير اسم الملف كواحدة من الوسائط. -
فتح الملف:
يتم استخدام دالةfopen
لفتح الملف بوضع القراءة فقط “r”، حيث يتم تخزين المؤشر الذي تم إرجاعه في متغيرfp
. إذا فشلت عملية فتح الملف (يُعادNULL
)، يتم طباعة رسالة خطأ. -
قراءة وطباعة الملف:
بعد فتح الملف بنجاح، يتم استخدام دالةfread
لقراءة الملف إلى المتغيرsource
. ثم يتم طباعة محتوى الملف باستخدامprintf
. يتم استخدامfread
بدلاً منgetc
لقراءة الملف كله دفعة واحدة إلى الذاكرة المؤقتة، وهذا يمكن أن يكون أكثر فعالية للملفات الكبيرة. -
تصفية الموارد:
يُغلق الملف باستخدامfclose
بمجرد الانتهاء من استخدامه. هذا يعتبر ممارسة جيدة لتحرير الموارد وتجنب تسريب الذاكرة. -
رمز العودة:
يتم إرجاع قيمة 0 في نهاية الدالةmain
للإشارة إلى أن البرنامج تم تنفيذه بنجاح.
هذه هي النقاط الرئيسية في الكود وكيفية عمله. إذا كانت لديك أية أسئلة إضافية أو تحتاج إلى مزيد من التوضيح حول أي جانب من الجوانب، فلا تتردد في طرحها!