الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكل في طبع متغير : يتوقف البرنامج او يطبع رموز غير مفهومة Access Violation Or Unknown Chars

بدأه youssefchou في 1 يونيو 2009 · 8 رد · 538 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكــم ورحمـة الله وبركاتــه ،،

اعاني من مشكل مع المتغيرات سواء في سي او سي ++

حيث دائما يحصل كراش للبرنامج او يطبع حروف غير التي ادخلتها او يطبع عناوين ...

وهذا مثال على احد الاكواد التي اعمل بها وهو ايضا يتوقف كلما ادخلت رقما

اتمنى ان اجد المشكل

نفس الامر يحصل معي اذا استعملت سلسلة حروف او نص

#include<stdio.h>
main()
{
int *ptr, i, y=0;
i=10;
ptr=&i;
*ptr=scanf("%d", y);
printf("*ptr = %d\n", *ptr);
}

ايضا في بعض الامثلة عندما ادخل عدد يتكون من رقم واحد "9" تتم كل الامور بخير ولكن اذا كان العدد يتكون من رقمين "15" او اكثر تحدث اخطاء

المترجم هو

visual c++ 6

جربت ايضا

dev c++ 4

ولكن لا نتيجة

شكراً مسبقا

#2
#include<stdio.h>
main()
{
	int *ptr, i;
	i = 10;
	ptr = &i;
	scanf("%d", ptr);
	printf("*ptr = %d\n", *ptr);
}

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#3

مشكور اخي gm

بالفعل انا اعقد على نفسي الطريق

ولكن فعلا صعب امتلاك تفكير سليم

المهم عندما ادخل عدد كبير يحدث مشكل عدم ضهوره ويضهر مكانه عنوان

وهذا مثال على دلك

123456789123456789
*ptr = -1395630315
Press any key to continue

شكرا

#4

لأنك استخدمت الفورمات "%d" وهو خاص بـSigned Integer بينما العدد الذي ادخلته كبير لا يمكن لـSigned integer ان يحمل قيمته فيتم عمل فورمات بشكل خاطئ وتكون النتيجة غير صحيحة .

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#5

طيب انا جعلته كده بس نفس المشكل

#include<stdio.h>
main()
{
	unsigned int *ptr, i;
	i = 10;
	ptr = &i;
	scanf("%u", ptr);
	printf("*ptr = %u\n", *ptr);
}

النتيجة

123456789123456789
*ptr = 2899336981
Press any key to continue
#6

"%u" فورمات للـunsigned integer يعني نفس حجم الـsigned integer :D

جرّب استخدام الفورمات الخاص بالـfloat اذا كنت تريد اعداد كبيرة .

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#7

والله طفشت اخي تقريبا جربت كل الفورمات دول double & float & long int ... لم ينفع

دائما نفس المشكل

#include<stdio.h>
main()
{
	float *ptr, i;
	i = 10;
	ptr = &i;
	scanf("%f", ptr);
	printf("*ptr = %f\n", *ptr);
}

123456789123456789
*ptr = 123456790519087100.000000
Press any key to continue

تم تعديل هذه المشاركة بواسطة youssefchou في 1 يونيو 2009 في 23:43

#8

دائما هناك حل :D

لم لا تستخدم احدى المكتبات الخاصة بالاعداد الكبيرة مثل MIRACL ؟

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#9

نعم اخي هناك حلول كثيرة

يمكن استعمال المكتبة iostream فهي تعمل بشكل جيد

وساحاول ان شاء الله غدا اليوم انتهت ساعات عملي على النت

بارك الله فيك اخي

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…