للكتاب كتابة عدد صحيح
-
01-10-2019 - |
سؤال
أحاول كتابة كلمة إلى ملف باستخدام هذه الوظيفة:
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);
وبهذه الطريقة ، تقوم بعمل مؤشر مزدوج للمؤشر بشكل رئيسي والذي يشير بعد ذلك إلى الملف.
لا تنتمي إلى StackOverflow