בעייה עם הVC

Orbi

New member
בעייה עם הVC

שלום לכולם, יש לי בעיה( יותר נכון פער בהבנה) בהפעלת הVC גירסה 6. יש לי קובץ טקסט שאני מכניס בתור command line argument, מצאתי איפה לרשום אותו למטרת debugging(פרוייקט-הגדרות-דיבוג-ארגומנטים של שורת פקודה) אבל התוכנית לא מצליחה לפתוח את הקובץ( זה ניראה כאילו היא לא מוצאת אותו), שמתי את קובץ הטקסט באותה ספרייה עם קובץ הexe וזה פשוט לא הולך, איפה אני מוצא את ההגדרה מאיפה הVC לוקח את קבצי הטקסט שמגיעים דרך ארגומנטים של שורת הפקודה? תודה מראש.
 

vinney

Well-known member
זה לא צריך להיות איפה שהEXE

זה צריך להיות איפה שהDSP. עדיף שתשים מסלול מלא וזהו.
 

Orbi

New member
המשך...

תודה ויני... כל פעם זה אתה זה שעונה לי ואם מותר לציין אז מהר מאוד :) כמובן שזה פתר לי את הבעיה ועכשיו אני יכול לדבג בלי בעייה... השאלת המשך שלי היא כזאת, אני פותח את קובץ הטקסט וקורא לתוך חוצץ את השורה הראשונה(fgets), אחרי זה אני רוצה לעשות כל מיני בדיקות על המילים בשורה הזאת, ולכן אני משתמש בsscanf אבל משום מה זה ניתקע בשלב הזה (יוצא עם הודעת שגיאה). השורות הרלוונטיות הן:
while((fgets(buffer,sizeof(buffer),fp)) != NULL) { while(sscanf(buffer,"%s",current_word) != EOF)​
קראתי את התיאור של שתי בפונקציות ועל פניו זה ניראה לי שאני הולך "לפי הספר" אבל כניראה שבכל זאת אני טועה איפהשהוא...
 

Orbi

New member
הודעת שגיאה

0xC0000005 Access violation שגיאה שהייתה לי בתוכניות אחרות ומדברת על כל מיני תקלות בגישה לזיכרון. התוכנית מתקדמת בסדר גמור כולל קריאה של השורה הנוכחית לחוצץ, והבעיה כשאני עושה sscanf- בשלב הזה יש שגיאה.
 

galh

New member
צריך להעביר את הכתובת של המשתנה

sscanf(buffer, "%s", &current_word);​
 

vinney

Well-known member
דבר נוסף

רצוי שהמשתנה יהיה מערך בגודל המספיק להכיל את המחרוזת הצפויה להגיע (וזאת נראה לי הבעיה). זאת בעיה נפוצה בעבודה עם SCANF לסוגיו לקריאת מחרוזות. תוודא שאתה מקצה מספיק מקום לcurrent_word.
 

Orbi

New member
כאן טמונה הבעייה

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

vinney

Well-known member
מצביע לתו זה בטוח לא טוב

כי מחרוזת זה לפחות 2 תוים (כולל ה0\ בסוף). תקצה גודל מקסימלי+1, כדי להיות בטוח. זה לא מה שיגמור לך את הRAM.
 

Orbi

New member
אני לא אבטיח אבל מקווה שדבר אחרון..

תודה רבה על התשובות קודם כל. עכשיו רק הבנתי שבצורה שאני עובד כל פעם sscanf יקרא את אותה מילה מהחוצץ, וכדי למנוע את זה אני צריך או להוריד את המילה שקראתי מהחוצץ בכל פעם, או להשתמש בstrtok ולהגדיר כפרמטרים של tok רווחים, טאבים וכו. יש שיטה אחרת יותר פשוטה שאני לא חושב עליה? האם היא עדיפה על השתיים שהזכרתי ומה לדעתך\כם עדיף מהשתיים שהזכרתי? מצטער על ההטרדות אני מרגיש קצת קרצייה....
 

vinney

Well-known member
המם...

זאת שאלה טובה. למעשה אתה מנסה לכתוב PARSER, ודבר הראשון שאתה צריך להחליט עליו הוא מה בעצם מפריד לך בין המילים. strtok נשמע כמו פתרון לא רע, יש עוד כל מיני שיטות טיפה יותר מתחכמות (למשל לרוץ עם מבציע על מה שFGETS מחזיר לך ולפרוש בעצמך) שעושות אותו דבר.
 
למעלה