פורסם 2005 באפריל 1020 שנים אני מנסה לגרום לקובץ שאני פותח ע"י Browse יפתח גם ב ++Cאבל אחרי שאני בוחר את הקובץ הוא נותן לי שגיאה, התוכנית עוברת קומפילציה ואני מריץ אותה אבל נתקעת באמצעהחלק קוד שזה נתקע הוא בחלק שהוא מנסה לעשות fopen לקובץvoid browse(char *file){ char pathName[260]; OPENFILENAME ofn; ZeroMemory(&ofn, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.lpstrFile = pathName; ofn.lpstrFile[0] = '\0'; ofn.nMaxFile = sizeof(pathName); GetOpenFileName(&ofn); //cout<<"selected file's name is: "<<ofn.lpstrFile<<endl; file = ofn.lpstrFile;}void horse_encryption(){ int i; FILE *input_file, *fout; char ch, ezer, *file=0; browse(file); input_file = fopen(file,"rb"); if (input_file == NULL ) { printf("Error Opening File"); exit(1); }
פורסם 2005 באפריל 1020 שנים תעשה:setstr(file, ofn.lpstrFile);בBROWSE. שים לב שבfile צריך להיות מאותחל במשהו לפני שאתה שולח אותו לSETSTR(בNULL - 0, או בכל מחרוזת אחרת שהקצאת מקודם, ללא עזרת הקומפיילר, וללא מחרוזת סטטית).כאשר SETSTR זוהי פונ שרשמתי בסטיקי. תחפש שם.
פורסם 2005 באפריל 1020 שנים מחבר עשיתי את מה שאמרתאבל אני עדיין מקבל בדיוק את אותה שגיאה שקיבלתי קודם :-\
פורסם 2005 באפריל 1020 שנים מחבר כשאני מדפסי עם cout בפונקציה הוא מדפיס טובאבל אני לא מצליח להוציא את זה מהפונקציה
פורסם 2005 באפריל 1020 שנים ניסית להדפיס את שם הקובץ לאחר שאתה חוזר מהפונ?תנסה להדפיס ותבדוק את שם הקובץ בכלל נמצא בfile.
פורסם 2005 באפריל 1020 שנים תבצע הקצאה דינמית ל- file לפני שליחתו לפונקתיה ובתוך הפונקציה על תשווה מצביע לשם הקובץ הנבחר לעותק של file אלא תבצע strcpy של שם הקובץ עצמו ל- file :http://www2.mta.ac.il/~amitz/downloads/dialog%20box%20in%20cpp.cpp
פורסם 2005 באפריל 1120 שנים מחבר מכיוון שזה דיי דומה לבעיה הקודמת העדפתי לא לפתוח דיון חדשוהפעםיצרתי פונקציה שכותבת ומוחקת את מה שהמשתמש כותב על המסך ומחזירה את זה בתור מערךהמטרה שלה הוא בעצם לקבל באופן ידני את הכתובת של הקובץ שאני רוצה לפתוח, לפי מה שנראה לי היא מחזירה את הערךאבל משום מה אני לא מצליח לפתוח את הקובץ כי הוא תמיד מקפיץ אותי להודעת שגיאה של הבדיקהבקיצור מספיק עם הדיבוריםפונקציה:void klita (char *file_name){ int X_POS=200; int Y_POS=300; char key ; char buf[2] ; int x = X_POS; int y = Y_POS; int index=0; char buffer[260]={NULL}; buf[1]='\0' ; setcolor(6); settextstyle(0,0,2); outtextxy(300,192,"Please write the full path"); outtextxy(348,224,"for the output file."); settextstyle(0,0,2); do { key = getch(); buf[0] = key ; setcolor(9); if ( key != '\b' ) { outtextxy(x,y,buf) ; if (x>800) { y=y+32; x=X_POS+48; } else { x=x+16; } buffer[index]=key; index++; } if ( key == '\b' ) { if(y==Y_POS) { if(x>X_POS) { x=x-16; } } else { if(x>X_POS+48) { x=x-16; } else if(x==X_POS+48) { y=y-32; x=808; } } setcolor(0) ; outtextxy(x,y,buf) ; index--; buffer[index]=NULL; } } while( key!=13 ); cleardevice(); strcpy(file_name,buffer); //cout<<"selected file's name is: "<<file_name<<endl;} void horse_encryption(){ int i; FILE *input_file, *fout; char ch, ezer, *in_file,*out_file=0; in_file = new char[STR_SIZE]; out_file = new char[STR_SIZE]; browse(in_file); //cout<<"selected file's name is: "<<getfile<<endl; input_file = fopen(in_file,"rb"); if (input_file == NULL ) { printf("Error Opening File\n"); exit(1); } klita(out_file); cout<<"selected file's name is: "<<out_file<<endl; fout = fopen (out_file, "wb"); if (fout == NULL ) { printf("Error no 2\n"); exit(1); }אני חושב שהבעיה נובעת אולי מאיפוס לא נכון של הפוינטר או המערך ,ואז הוא לא מחזיר באמת את מה שאני צריךמה אתם אומרים?
פורסם 2005 באפריל 1220 שנים הפונקציה browse שלך לא בסדר.היא מקבלת pointer by value ולכן אתה לא יכול לעשות את ההשמה לפוינטר שאתה מעביר (כלומר, אתה יכול לעשות את ההשמה, אבל הערך ילך לאיבוד כשהפונקציה יוצאת.פיתרון 1 - תשתמש ב- strncpy כדי להעתיק את שם הקובץ (תוודא שיש לך מספיק מקום במערך, עדיף גם שתעביר את גודל ה- buffer שלך כדי לוודא את זה)פיתרון 2 - במקום להעביר לפונציה פוינטר, תעביר reference לפוינטר או פוינטר לפוינטר, ותפנה את הזיכרון מחוץ לפונקציה.
פורסם 2005 באפריל 1220 שנים מחבר דווקא הפונקתיה Browse עובדת מצויין,הבעיה עכשיו היא כמו שציינתי בפונקתיה שניה klitaוהערך לא הולך לאיבוד אחרי שאני חוזר מהפונקציה, בדקתי את זה עם השורהklita(out_file);cout<<"selected file's name is: "<<out_file<<endl;מחוץ לפונקציה כמובן, וזה נראה טובאבל משום מה כשאני שולח את הפוינטר בניסון לפתיחת הקובץ מהסוג הזה אני מקבל את השגיאהError no 2
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.