המרה מ- int ל string

nadavb

New member
המרה מ- int ל string

האם יש בשפת c פונקציה כמו str בפסקל, שממירה מערך מספרי int, למחרוזת string? אם משהו יודע, מכיר, או בשרי ידידות עמוקים אם אותה פונקציה אשמח אם הוא, או היא, יכירו לי אותה... תודה מראש.
 

linuxius

New member
sprintf

זוהי פונקציה שעושה הדפסה מפורמטת לתוך buffer נניח: char snum[5]; sprintf(snum,"%d",1234); שים לב הייתי מציע לך לעבוד עם snprintf
 

voguemaster

New member
המממ

אין תחליף אמיתי והולם ל-snprintf עד כמה שידוע לי. יש הרבה פונקציות פירמוט טקסט, אבל נדמה לי שזו היחידה שבאמת אוכפת את מספר התווים המקסימלי שנכנס ל-BUFFER, אבל אולי לא ידוע לי על משהו אחר... אפשרי
 

ihovav

New member
בגלל

שיש עוד פונציה שנקראת SPRINTF, והיא בעייתית כי היא מאפשרת גלישה מהמערך - ולא מבצעת בדיקה בנושא לגבי SNPRINTF - היא מכניסה את הערכים ומחזירה את מספר התווים שנכתבו לבאפר ללא ה "n/" בסוף אתה צריך לבצע בדיקה האם הוכנסו כל התווים או שבגלל גודל הבאפר - לא הכל הוכנס, ולטפל בזה
 

eyalm16

New member
מה הסיבוך הגדול - שתי פונקציות

itoa שלם למחרוזת atoi מחרוזת לשלם פונקציות שניתנו ע"י הקומפיילר. חוץ מזה שאפשר: int number; char string[]; sprintf(string,"%d",number);
 

ihovav

New member
הנה הסיבוך

לגבי ITOA - אתה כמשתמש צריך לחשב כמה תווים אתה צריך כדי להעביר את המספרים לתווים וזו עבודה מיותרת, מה שנחסך ממך ב SPRINTF ו SNPRINTF לגבי SPRINTF - יש כמה וכמה הודעות לפני כן לגבי למה לא כדאי להשתמש בה ביחס ל SNPRINTF ובכלל...
 

nadavb

New member
בעיית MFC מנג´סת בהמשך...

אוקיי אז את ההמרה זה עושה בסדר, עכשיו אני מכניס את זה ל -Edit control, ואני לוקח את הנתונים מרשימה, לפני כל נתון חדש אני מוסיף "n\" כדי לרדת שורה, אבל באופן משונה למדי במקום לרדת שורה זה כותב לי את האות ´ב´ עם דגש (אני לא יודע אם זה דגש קל או כבד..
), ה- edit box היא מטיפוס CString. כל עזרה תתקבל בברכה...
 

voguemaster

New member
מוזר

נסה להשתמש במאקרו T_ (יכול להיות שהסדר הפוך, שכחתי) שהופך מחרוזת רגילה ל-TCHAR (שוב אם אני זוכר נכון)
 

odstudio

New member
נו ברור...

ה- ב´ הזאת שאתה רואה זה הסימן \n שאתה מכניס בכל סוף שורה. זאת מכיון שב- properties של ה- edit box לא סימנת שייתמוך בריבוי שורות (multi-line). אם תסמן את האפופציה הזאת, תראה איך זה מסתדר.
 

voguemaster

New member
הצעה נוספת

לא מומלץ לעבוד עם atoi. עד כמה שזכור לי (לפחות ביוניקס) היא לא מטפלת במקרים מוזרים וכשהיא לא מצליחה היא מחזירה 0. זה לא מספיק טוב. אני מעדיף להשתמש ב-strtoul, ובדיקה פשוטה של המצביע שהיא מחזירה (אחד הארגומנטים זה מצביע למצביע
) מגלה אם הייתה שגיאה או לא.
 

nadavb

New member
ניסיתי עם T_, לא עובד...

תודה בכל מקרה, אגב אולי יכול להיות שזה קשור בהגדרות ה- EDITBOX? סימנתי לו את ה- multiline, אבל זה לא עוזר...
 

odstudio

New member
אם כך, זה הפתרון

במקום
\n​
תוסיף
\r\n​
וזה יפתור לך את הבעייה.
 

nadavb

New member
../images/Emo51.gif../images/Emo45.gif

btw, למה זה עושה לי את הבעייה הזאת?
 

voguemaster

New member
כי זה מיקרוסופט

בין מערכות הפעלה שונות יש הבדל בתו (או שניים) שמסיים שורה. ביוניקסים ולינוקס (כמעט בכולם אם לא בכולם), התו הוא 0x0A הידוע בשם newline. תחת חלזונות, השילוב של 0x0A ו-0x0D הוא התו שמוריד לשורה חדשה. זה נקרא CRLF (פירוש: Carriage-return, Linefeed) וזה הסטנדרט עבור רוב הפרוטוקולים מבוססי רשת. בכל זאת מיקרוסופט החליטו ללכת עם זה ולא עם יוניקס (למרות שלדעתי יש מקום להבדיל בין פרוטוקולי רשת למסיים שורה במערכת ההפעלה).
 
למעלה