سؤال

أحاول كتابة كلمة إلى ملف باستخدام هذه الوظيفة:

extern void write_int(FILE * out, int num) {
   fwrite(&num,sizeof(int),1, out);
   if(ferror(out)){
      perror(__func__);
      exit(EXIT_FAILURE);
   }
}

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

هل كانت مفيدة؟

المحلول

جرب هذا بدلاً من ذلك:

void write_int(FILE * out, int num) {
   if (NULL==out) {
       fprintf(stderr, "I bet you saw THAT coming.\n");
       exit(EXIT_FAILURE);
   }
   fwrite(&num,sizeof(int),1, out);
   if(ferror(out)){
      perror(__func__);
      exit(EXIT_FAILURE);
   }
}

ولماذا كانت وظيفتك الأصلية extern?

نصائح أخرى

هل مقبض الملف صالح؟ هل قمت بـ "W"؟ سوف يلغي () segfault إذا لم يكن كذلك.

الوظيفة نفسها لا تفعل شيئًا حقًا ، لذلك من الواضح أن نداء الكتب هذه هي المشكلة. فحص الحجج.

out لا يحتوي على عنوان الملف ، بل يحتوي على عنوان مؤشر الملف الذي يمر في MAIN. يجب أن يكون هذا النموذج الأولي للوظيفة مثل:

extern void write_int(FILE * & out, int num);

وبهذه الطريقة ، تقوم بعمل مؤشر مزدوج للمؤشر بشكل رئيسي والذي يشير بعد ذلك إلى الملف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top