עבור לתוכן

איך לבצע בדיקה אם הפרמטר שהינו מסוג size_t איננו שלילי? שפת C

Featured Replies

פורסם

שלום לכולם,

אני כותב תכנית בשפת C שמקבלת שני פרמטרים שכל אחד מהם מסוג size_t. כשאני מזין פרמטרים שליליים אז בדיקה רגילה לא עוזרת כי הפרמטרים הם unsigned לכן ההתחייסות אליהם כאל iteger-ים מאוד גדולים..

יש למישהו פתרון עבורי איך לבדוק אם הם שליליים?

תודה

פורסם

אתה עושה משהו לא טוב אם אתה בכלל משייך מספרים שליליים ל-size_t.

פורסם

מספרים unsigned הם מהגדרה לא יכולים להיות שליליים. אם אתה רוצה לקלוט את המספר כקלט מהמשתמש אז תקלוט אותו לתוך משתנה שהוא signed.

פורסם
  • מחבר

תודה רבה על התגובות.

קיבלתי משימה לממש שתי פונק' כאשר הפרמטרים שהן מקבלות הן מסוג size_t (המשימה היא מימוש מסוים של malloc),

לבסוף ביצעתי את הבדיקה עם cast ל signed.

נערך על-ידי D@nny

פורסם

אם עשית cast ל-signed ובדקת אם המספר הוא שלילי אז אפקטיבית איבדת חצי מהטווח שאתה יכול להזין לפונקציה. אתה יכול לנסות את זה ע"י הכנסת מספר חיובי גדול, למשל 0xFFFFFFFF.

הייתי מנחש שפיספסת משהו מהשאלה, או שהיא לא הוגדרה נכון.

פורסם
תודה רבה על התגובות.

קיבלתי משימה לממש שתי פונק' כאשר הפרמטרים שהן מקבלות הן מסוג size_t (המשימה היא מימוש מסוים של malloc),

לבסוף ביצעתי את הבדיקה עם cast ל signed.

רגע, מדובר בפונקציות שמקבלות את הקלט כפרמטרים, או שזה קלט שמגיע מהמשתמש (ב-scanf)?

כי אם מדובר במקרה הראשון אז הפונקציה בכלל לא צריכה לבדוק אם הקלט הוא שלילי - כמו שאמרתי קודם, size_t הוא מהגדרה אי-שלילי. רק אחרי ה-scanf צריך לוודא שהמספר אכן חיובי.

נערך על-ידי שניצל

פורסם

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

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

לא קיווה להם.

פורסם
  • מחבר

תודה רבה

ארכיון

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

דיונים חדשים