בדיקה והגבלת גודל מחרוזת ב-C - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

בדיקה והגבלת גודל מחרוזת ב-C


efod26

Recommended Posts

שלום,

אני צריך כחלק מתכנית כלשהי לקלוט שם משתמש ואני צריך להגביל אותו ל-10 תווים

ניסיתי לעשות זאת אבל נתקעתי אנא עזרה:

void personal()		//פונקציה לקליטת שם משתמש
{
char name[11];

printf("\nEnter Your Name\n");
scanf("%s",&name);
name[10] = '\0';
printf("\nThe Name you've Typed Is:%s\n",name);
}

קישור לתוכן
שתף באתרים אחרים

הוא נותן לי שגיאה לא מוציא אותי מהתכנית

חוץ מזה אם אני רוצה לקלוט רק מהמחרוזת ולא את כל גודל המערך?

איך אני עוצר את הקליטה ברגע שנלחתץ אנטר?

קישור לתוכן
שתף באתרים אחרים

אתה פשוט לוחץ אנטר וזה יוצא... אם לתפרט מה הבעיה במקום לתת הודעות סתומות שכאלה, עזרה כנראה שלא תקבל.

ממש תשובה אינטילגנטית, ווואוו אתה גדול.

מישהו יכול להתייחס ברצינות לשאלה, אני רוצה לקלוט רק חלק מהמערך הוא בגודל של 15 אני רוצה קלט

באורך של 4.

איך נעשה?

קישור לתוכן
שתף באתרים אחרים

אוקי יש פתרון:

gets(name);

ככה אני קולט רק חלק מהמערך ובכל שאר התאים הוא מציב אפס כך שאני ודע בדיוק כמה תאים במערך "תפסתי"

ובקשר לשאלה השנייה גם יש פתרון:

i

f (name[14]!='\0')
{
printf("Error, The Name You've Type Is To Long\n");
}

ככה אם לא הוקלד אנטר בתא הרחקון במערך אקבל הודעת שגיאה

קישור לתוכן
שתף באתרים אחרים

למעשה זה פתרון גרוע מאוד.

הקריאה ל-gets לא מגבילה את המשתמש בשום צורה. אם המשתמש יכניס מחרוזת באורך 60 תווים, אז gets תקרא את כל 60 התווים, כשה-15 הראשונים יייכנסו לתוך המערך שלך, ו-45 התווים הבאים פשוט יידרכו על מקום בזכרון ששמור לדברים אחרים.

מצב כזה נקרא buffer overflow, והוא באג די חמור (במקרה הטוב הוא גורם לקריסה של התכנית, במקרה הרע הוא גורם לפירצת חמורה).

קישור לתוכן
שתף באתרים אחרים

הכוונה הייתה לקלוט מחרוזת עד 15, gets נתן לי לקלוט עד הקשת האנטר,

הבדיקה השנייה איפשרה לי להגביל את הקלט עד 15 ברגע שבדקתי אם התו האחרון הוקש אנטר

יש הצעה טובה יותר?

קישור לתוכן
שתף באתרים אחרים

שאלה אחרת בנושא,

השתמשתי בפונקציה isalpha כדי לשלול הכנסה של ספרות לקלט השם, אבל זה ביטל לי את מקש הרווח,

זאת אומרת לתכנית הנל יש ערך לכל האותיות וגם למקש הרווח ואחרי השימוש בפונקציה מקש הרווח נחשב כספרה.

יש דרך לפתור זאת?

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...