פורסם 2013 ביוני 1312 שנים שלום לכולם,אני כותב תכנית בשפת C שמקבלת שני פרמטרים שכל אחד מהם מסוג size_t. כשאני מזין פרמטרים שליליים אז בדיקה רגילה לא עוזרת כי הפרמטרים הם unsigned לכן ההתחייסות אליהם כאל iteger-ים מאוד גדולים..יש למישהו פתרון עבורי איך לבדוק אם הם שליליים?תודה
פורסם 2013 ביוני 1312 שנים מספרים unsigned הם מהגדרה לא יכולים להיות שליליים. אם אתה רוצה לקלוט את המספר כקלט מהמשתמש אז תקלוט אותו לתוך משתנה שהוא signed.
פורסם 2013 ביוני 1312 שנים מחבר תודה רבה על התגובות.קיבלתי משימה לממש שתי פונק' כאשר הפרמטרים שהן מקבלות הן מסוג size_t (המשימה היא מימוש מסוים של malloc), לבסוף ביצעתי את הבדיקה עם cast ל signed. נערך 2013 ביוני 1312 שנים על-ידי D@nny
פורסם 2013 ביוני 1312 שנים אם עשית cast ל-signed ובדקת אם המספר הוא שלילי אז אפקטיבית איבדת חצי מהטווח שאתה יכול להזין לפונקציה. אתה יכול לנסות את זה ע"י הכנסת מספר חיובי גדול, למשל 0xFFFFFFFF.הייתי מנחש שפיספסת משהו מהשאלה, או שהיא לא הוגדרה נכון.
פורסם 2013 ביוני 1312 שנים תודה רבה על התגובות.קיבלתי משימה לממש שתי פונק' כאשר הפרמטרים שהן מקבלות הן מסוג size_t (המשימה היא מימוש מסוים של malloc), לבסוף ביצעתי את הבדיקה עם cast ל signed.רגע, מדובר בפונקציות שמקבלות את הקלט כפרמטרים, או שזה קלט שמגיע מהמשתמש (ב-scanf)?כי אם מדובר במקרה הראשון אז הפונקציה בכלל לא צריכה לבדוק אם הקלט הוא שלילי - כמו שאמרתי קודם, size_t הוא מהגדרה אי-שלילי. רק אחרי ה-scanf צריך לוודא שהמספר אכן חיובי. נערך 2013 ביוני 1312 שנים על-ידי שניצל
פורסם 2013 ביוני 1412 שנים אם הפונקציה מקבלת כפרמטר שני ערכים ובחתימה שלה הם מוצהרים מטיפוס size_t, אז אין לך שום סיבה לבדוק האםהמספרים שליליים. אם מי שהשתמש בפונקציה הזין לה מספרים שליליים, הרי זו טעות שלו והוא צפוי לקבל תוצאות שהואלא קיווה להם.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.