פורסם 2005 במאי 2320 שנים יש לי מטלה לבנות תוכנה שתבקש שם משתמש וסיסמא שאני יקבע ואם הם נכונים אז היא תעשה משו לא משנה כרגע.עכשיו זה לא בעיה הבעיה נוצרת בזה שאת הסיסמא אני צריך שהיא תדפיס כ * (כוכבית)כלומר ככה זה נראה אצלי בתוכנה:enter user namedimaenter pass123וככה זה אמור להיראות:enter usernamedimaenter pass***הבנתם?אם לא תגידו אני יסביר שוב.זה הקוד שלי:#include <stdio.h>#include <conio.h>#include <string.h>void main(){ char user[]="dima"; char user1[5]; char pass[]="123"; char pass1[50]; clrscr(); printf("Enter user name (maximum 5 sumbols):"); scanf("%s", user1); if ( strlen(user1) > 5 ) { printf("The user you entred is more than 5 symbols"); printf("\nPress any key to exit"); getch(); } if ( strcmp(user,user1) == 0 ) { printf("Enter password for %s:", user1); scanf("%s", pass1); if ( strcmp(pass, pass1) == 0 ) { printf("Accept username and password."); } else { printf("Wrong password. Press any key to exit"); getch(); } } else { printf("Wrong username. Sorry. Press any key to exit"); getch(); }}
פורסם 2005 במאי 2320 שנים אתה רוצה עם אפשרות למחיקה?אם לא זה נורא פשוט, אתה משתמש בGETCH, וכל פעם שזה שונה מ-\n אתה מדפיס כוכבית.key=getch();i=0;while(key!='\n'){pass[i]=key;i++;printf("*");key=getch();}
פורסם 2005 במאי 2420 שנים מחבר לא עובד בלחיצה על אנטר הוא ממשיך להדפיס כוכביות שיניתי את זה ועכשיו זה אומר שכל סיסמא שאני מכניסה לא מתאימהוכן אני רוצה גם אם מחיקהשוב תודה
פורסם 2005 במאי 2420 שנים ברור שזה לא מפסיק כשאתה לוחץ על אנטר, כי אתה צריך לוודא שהאסקי של המקש שנלחץ אינו האסקי של אנטר (או כל אות אחרת שתבחר). אם אני זוכר נכון ה-ASCII של ENTER הוא 13. אבל אני ממש לא בטוח... לגבי אפשרות מחיקה, אתה צריך להשתמש בפקודה כלשהי שעוברת למקום מסויים, XY, במסך ואני לא זוכר אותה כרגע...
פורסם 2005 במאי 2420 שנים מחבר ברור שזה לא מפסיק כשאתה לוחץ על אנטר, כי אתה צריך לוודא שהאסקי של המקש שנלחץ אינו האסקי של אנטר (או כל אות אחרת שתבחר). אם אני זוכר נכון ה-ASCII של ENTER הוא 13. אבל אני ממש לא בטוח... לגבי אפשרות מחיקה, אתה צריך להשתמש בפקודה כלשהי שעוברת למקום מסויים, XY, במסך ואני לא זוכר אותה כרגע...את זה הבנתי ושיניתיהבעיה היא שלא משנה אם אני מכניס קוד נכון או זה אומר wrong password
פורסם 2005 במאי 2420 שנים חחח לא....נראה לי שיש כזה דבר \b כמו \n רק שזה BACKSLASH תנסה לבדוק אם זה אכן קיים, ואיך משתמשים בזה(אני מאמין שפשוט מדפיסים את זה.אם זה רק חוזר אחורה(כאילו יש INSERT) אז תדפיס רווח ושוב \b.
פורסם 2005 במאי 2520 שנים אתה בטוח שאתה יכול להשוות מחרוזות בגדלים שונים? כי הגדרת את pass בגודל 50 תווים ואת pass1 בגודל 3 תווים... אם אני צודק, אז זה הבעייה... תנסה לשנות אתל הגודל של pass ל3 ותראה מה קורהיש את הספר הזה שלמדתי ממנו תוך שבועיים C לרמה של 2 יח"ל...http://www.hod-ami.co.il/product.asp?catalog%5Fname=hodami&category%5Fname=C&product%5Fid=59159&ParentCategory=Programming
פורסם 2005 במאי 2520 שנים רק עכשיו שמתי לב... בקוד שלך יש בעיה חמורה של buffer overflow.הגדרת את user1 בתור מערך של 5 תוים.אם המשתמש הכניס יותר מ- 4 תוים, אתה עולה על הזיכרון של user ומשנה אותו. אם הוא מכניס משהו קצת יותר ארוך, אתה עולה גם על כתובת החזרה מ- main ויהיה לך segmentation fault במקרה הטוב.
פורסם 2005 במאי 2520 שנים מחבר כן אבל עשיתי בדיקה אם ה user1 יותר גדול מ 5 הוא מוציא שגיאה יוצא מה זה לא מספיק טוב?
פורסם 2005 במאי 2520 שנים לא מספיק טוב אם אתה לא רוצה שהתוכנית תעוף לך (תנסה להכניס יותר מ- 10 תוים ותראה מה יקרה).אגב, בדיוק בגלל זה, אם תוכנית כזאת היתה מגינה על משהו, כל האקר ממוצע היה יכול לפרוץ לשם (בלי קשר לזה שהטקסט של שם המשתמש והסיסמא נמצאים בקוד)אתה יכול להגביל את מספר התוים ש- scanf תקרא ע"יscanf("%4s", pass1);
פורסם 2005 במאי 2520 שנים מחבר טוב זאת תוכנה בסיסית אני לא בונה איזה משהוא מתוחכם בשביל חברה גדולהאבל תודה שאתה אומר אני יתייחס לזה וישנה את הקוד
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.