C++ מה זה התוספת s_ - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

C++ מה זה התוספת s_


RonCohen

Recommended Posts

מישהו שאל אותה שאלה בדיוק בדיון אחר. התשובה שלי:

הפונקציה scanf חשופה לסוג של פירצת אבטחה שנקראת Buffer Overflow (אבל רק אם משתמשים בה כדי לקרוא מחרוזות, כלומר ב-s%). הקומפיילר מזהיר מפני זה ומייעץ להשתמש בגרסה "בטוחה" של הפונקציה בשם scanf_s, אבל בשביל מישהו שרק לומד לתכנת זה לא כזה קריטי (במיוחד אם אתה לא משתמש בה לקרוא מחרוזות).

ההבדל הוא שעל מנת לקרוא מחרוזת באמצעות scanf אתה צריך להעביר מערך של תווים (משתנה מסוג *char), וכשאתה משתמש ב-scanf_s אתה צריך להעביר בנוסף למערך הזה גם מספר שאומר מהו גודל המערך (מספר התווים המקסימלי שאתה מרשה לקרוא לתוכו).

אגב, ב-++C לא משתמשים ב-scanf, משתמשים ב-cin.

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

קודם כל הם יותר חסינים מפני שגיאות. בעקרון printf ו-scanf יכולות לקבל כל רשימת פרמטרים - גם אם זו לא תואמת את מחרוזת ה-format, לדוגמה הקוד הזה יתקמפל:

double x;
printf("%d", x);

למרות שהוא לא תקין (צריך להדפיס את x באמצעות f%).

או אפילו אפשר לעשות כזה דבר בטעות:

printf("%d%d", x);

שזה גם יתקמפל, אבל לא ירוץ נכון (כי היית צריך להעביר שני פרמטרים במקום אחד). נראה לי ש-Visual Studio ידע לתת אזהרה על דבר כזה, אבל טכנית זה קוד חוקי.

לעומת זאת, בשימוש ב-cout אתה פשוט עושה cout << x, ואי אפשר להתבלבל - הוא ידפיס אותו כ-double.

בנוסף, cin ו-cout הם ניתנים להרחבה, כלומר אתה יכול להגדיר למחלקה שלך את האופרטור << או >> ככה שיהיה אפשר להדפיס אותה או לקרוא לתוכה מהקלט באמצעות cin ו-cout. יש הסבר על זה כאן:

http://www.learncpp.com/cpp-tutorial/93-overloading-the-io-operators/

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

ארכיון

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

×
  • צור חדש...