עבור לתוכן

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

Featured Replies

פורסם

שלום,

אני צריך כחלק מתכנית כלשהי לקלוט שם משתמש ואני צריך להגביל אותו ל-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);
}

פורסם

תוסיף 10 בין האחוז ל s.

פורסם
  • מחבר

לא זאת הבעיה....

תחפש פתרון אחר

פורסם
  • מחבר

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

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

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

פורסם

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

פורסם
  • מחבר

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

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

מישהו יכול להתייחס ברצינות לשאלה, אני רוצה לקלוט רק חלק מהמערך הוא בגודל של 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 ברגע שבדקתי אם התו האחרון הוקש אנטר

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

פורסם

להקשיב למה שאומרים לך?


#include <stdio.h>
#include <string.h>

int main(void)
{
char name[16];
scanf("%15s", &name);
printf("%s [%d]\n", name, strlen(name));
}

פורסם
  • מחבר

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

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

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

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

פורסם

כן לבדוק אם זה isalpha או שזה רווח.

ארכיון

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

דיונים חדשים