السلام عليكم
اريد عمل برنامج console يكون كالتالي :
Please enter your name:ahmed
ahmed is the best
Enter to exit
كما ترون في البداية يطلب من المستخدم ان يدخل اسمه ثم نضيف جملة is the best الى اسم المستخدم
ثم نطبع جملة enter ro exit كي نضمن الا ينتهي البرنامج الا بعد الضغط على اي زر...
.386 .MODEL flat, stdcall OPTION CASEMAP:NONE Include windows.inc Include kernel32.inc Include masm32.inc IncludeLib kernel32.lib IncludeLib masm32.lib .data one DB "Please enter your name :", 0 two DB "is da best",0 CRLF DB 00Ah, 00Dh, 0 ExitMsg DB "Enter to Exit", 0 .data? buffer DB ? .code Start: invoke StdOut, addr one invoke StdIn, addr buffer, 15 xor ebx,ebx comparison: inc ebx cmp buffer[ebx],NULL jne comparison mov buffer[ebx],20h invoke StdOut, addr buffer invoke StdOut, addr two invoke StdOut, addr CRLF invoke StdOut, addr ExitMsg invoke StdIn, addr buffer, 1 invoke ExitProcess, 0 End Start
انا اعرف ان السترنج تنتهي بـ NULL لذالك اذا بحثنا عن الـ NULL واستبدلناها باي حرف اخر وليكن 20h اي زر المسافة
ثم قمنا بطباعة اليوزنيم يليه جملة is the best فالمفروض ان يطبع الجملتين متصلتين لانه لا يوجد ما يفصلهما
اي لا يوجد شيء يدل على ان allko هي سترنج منفصلة بحد ذاتها فقد قمت بازالة العلامة الدالة على نهايتها وهي ال null
رغم ذلك فان هذا الكود يطبع التالي :
Please enter your name:allko allko is da best enter to exit
لاحظ انه قبل كلمة is هناك مسافة
يبدوا ان تخزين اي سترنج لا يضيف الى نهايتها NULL فحسب ، بل أيضا CRLF .
حاولت بدل ان ابحث عن الـ NULL ، ان ابحث عن الـ CRLF واستبدلهما بمسافتين لكن فشلت المحاولة.
ما الحل؟