פורסם 2008 בדצמבר 317 שנים שלום,אני צריך כחלק מתכנית כלשהי לקלוט שם משתמש ואני צריך להגביל אותו ל-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);}
פורסם 2008 בדצמבר 616 שנים מחבר הוא נותן לי שגיאה לא מוציא אותי מהתכניתחוץ מזה אם אני רוצה לקלוט רק מהמחרוזת ולא את כל גודל המערך?איך אני עוצר את הקליטה ברגע שנלחתץ אנטר?
פורסם 2008 בדצמבר 616 שנים אתה פשוט לוחץ אנטר וזה יוצא... אם לתפרט מה הבעיה במקום לתת הודעות סתומות שכאלה, עזרה כנראה שלא תקבל.
פורסם 2008 בדצמבר 616 שנים מחבר אתה פשוט לוחץ אנטר וזה יוצא... אם לתפרט מה הבעיה במקום לתת הודעות סתומות שכאלה, עזרה כנראה שלא תקבל.ממש תשובה אינטילגנטית, ווואוו אתה גדול.מישהו יכול להתייחס ברצינות לשאלה, אני רוצה לקלוט רק חלק מהמערך הוא בגודל של 15 אני רוצה קלטבאורך של 4.איך נעשה?
פורסם 2008 בדצמבר 716 שנים מחבר אוקי יש פתרון:gets(name);ככה אני קולט רק חלק מהמערך ובכל שאר התאים הוא מציב אפס כך שאני ודע בדיוק כמה תאים במערך "תפסתי"ובקשר לשאלה השנייה גם יש פתרון:if (name[14]!='\0') { printf("Error, The Name You've Type Is To Long\n"); }ככה אם לא הוקלד אנטר בתא הרחקון במערך אקבל הודעת שגיאה
פורסם 2008 בדצמבר 716 שנים למעשה זה פתרון גרוע מאוד.הקריאה ל-gets לא מגבילה את המשתמש בשום צורה. אם המשתמש יכניס מחרוזת באורך 60 תווים, אז gets תקרא את כל 60 התווים, כשה-15 הראשונים יייכנסו לתוך המערך שלך, ו-45 התווים הבאים פשוט יידרכו על מקום בזכרון ששמור לדברים אחרים.מצב כזה נקרא buffer overflow, והוא באג די חמור (במקרה הטוב הוא גורם לקריסה של התכנית, במקרה הרע הוא גורם לפירצת אבטחה חמורה).
פורסם 2008 בדצמבר 716 שנים מחבר הכוונה הייתה לקלוט מחרוזת עד 15, gets נתן לי לקלוט עד הקשת האנטר,הבדיקה השנייה איפשרה לי להגביל את הקלט עד 15 ברגע שבדקתי אם התו האחרון הוקש אנטריש הצעה טובה יותר?
פורסם 2008 בדצמבר 716 שנים להקשיב למה שאומרים לך?#include <stdio.h>#include <string.h>int main(void){ char name[16]; scanf("%15s", &name); printf("%s [%d]\n", name, strlen(name));}
פורסם 2008 בדצמבר 716 שנים מחבר שאלה אחרת בנושא,השתמשתי בפונקציה isalpha כדי לשלול הכנסה של ספרות לקלט השם, אבל זה ביטל לי את מקש הרווח,זאת אומרת לתכנית הנל יש ערך לכל האותיות וגם למקש הרווח ואחרי השימוש בפונקציה מקש הרווח נחשב כספרה.יש דרך לפתור זאת?
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.