ABA


"C - שאלה פשוטה לגבי scanf"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #15749 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 15749
D-KinG
חבר מתאריך 8.6.02
3490 הודעות
   11:18   05.03.10   
אל הפורום  
  C - שאלה פשוטה לגבי scanf  
 
   אז ככה אני די חדש ב-C
ולא הבנתי את ההמרה ש-scanf עושה
אם מישהו יוכל לתת לי כמה דוגמאות בשביל להבהיר את העניין...
ניסיתי לקרוא בכל מיני מקומות ולא כ"כ הבנתי..
תודה



                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  המרה? הוא מכניס לכתובת בזכרון שאתה נותן לו את ldan192  05.03.10 11:59 1
     כן את זה אני יודע... D-KinG 05.03.10 12:40 2
         כמו שאמרתי, שפת C אינה stricted type... ldan192  05.03.10 12:48 3
             תודה D-KinG 06.03.10 15:55 4

       
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   11:59   05.03.10   
אל הפורום  
  1. המרה? הוא מכניס לכתובת בזכרון שאתה נותן לו את  
בתגובה להודעה מספר 0
 
התוכן המבוקש.
למשל
;int r
;(scanf("%d", &r
(d (int), %s (char*), %c (char) %lf (double%
הערכים האלה לא באמת משנים יותר מדיי (ב-scanf, ובכלל, בגלל ש-C היא שפת תיכנות שבא מערכת הטיפוסים לא strict במיוחד) חוץ מהעובדה שהוא ידע מה גודל המשתנה אליו הוא מכניס את הכתובת (שאגב, בגלל זה buffer overrun נחשב מועד לפירצות אבטחה).


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
D-KinG
חבר מתאריך 8.6.02
3490 הודעות
   12:40   05.03.10   
אל הפורום  
  2. כן את זה אני יודע...  
בתגובה להודעה מספר 1
 
   השאלה היא אם הוא עושה המרות כמו ב-printf...
נגיד

int i=97;
printf("%c", i);

יודפס a..
השאלה אם ב-scanf גם אפשר לעשות כאלה דברים בכיוון ההפוך.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   12:48   05.03.10   
אל הפורום  
  3. כמו שאמרתי, שפת C אינה stricted type...  
בתגובה להודעה מספר 2
 
ערכתי לאחרונה בתאריך 05.03.10 בשעה 12:55 בברכה, ldan192
 
זכור כי גודל int הוא 4 בייט כאשר char הוא בייט אחד בלבד.
אם תעשה דבר כזה:

int i=0;
scanf("%c", &i); // get 'a' for example
printf("%c", i); // prints 'a'

זה יעבוד

אבל אם תרשום



int i=48291;
scanf("%c", &i); // get 'a' for example
printf("%c", i); // prints 'a'
printf("%d", i); // won't print 97!

זה נובע מכך שהוא יכתוב רק בבייט הראשון את ה-97 ושאר 3 הבייטים יכילו את הביטים שמהמספר 48291.
כלומר, התוצאה תהיה זהה ל-



i = 48291 & (-16); // and with 111....110000
i += 97;


+/- טעויות חישוב שעשיתי


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
D-KinG
חבר מתאריך 8.6.02
3490 הודעות
   15:55   06.03.10   
אל הפורום  
  4. תודה  
בתגובה להודעה מספר 3
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net