هل هناك طول مخزن مؤقت افتراضي لطريقة "Sprintf"؟
-
23-09-2019 - |
سؤال
لقد استخدمت طريقة SprintF لتنسيق البيانات لسلسلة أريد أن أكتبها إلى ملف ، في تطبيق C ++ Console باستخدام VS 2008. الإدخال هو رسالة معينة ، والتي لها متغيرات وقيم مختلفة (على سبيل المثال: اكتب "int" 10 ' / type string والقيمة "ABC" ، وما إلى ذلك) عندما أرسل رسالتين ، فإنه يعمل بشكل مثالي. ولكن عندما أرسل أكثر من رسالتين ، فإنه يعطي خطأ في وقت التشغيل قوله 0xc0000005: موقع قراءة انتهاك الوصول 0xabababab. لماذا يحدث هذا؟ هل لأن طريقة "Sprintf" لها طول مخزن مؤقت افتراضي؟ كيف يمكنني التغلب على هذه المشكلة؟
المحلول
لا ، لا يوجد حجم افتراضي. سوف يفترض أن هناك مساحة كافية ، والكتابة كما هو محدد بواسطة سلسلة التنسيق.
يقول انتهاك وصولك قراءة, ، وهو ما يلمح أنه قد يكون هناك خطأ في الحجج الخاصة بك ، ربما لا يتطابق مع سلسلة التنسيق.
يجب أن يكون لديك العديد من الوسائط تمامًا ، وأنواع مناسبة والترتيب الصحيح ، كما تشير إلى استخدام %
-الرموز في سلسلة التنسيق.
نصائح أخرى
بالمناسبة ، قد ترغب في إلقاء نظرة على هذه الصفحة.
0xabababab: يستخدمه Microsoft's Heapalloc () لتمييز بايت حارس "No Man's Land" بعد تخصيص ذاكرة الكومة