פורסם 2011 בדצמבר 3113 שנים אני צריך ליצור תוכנית הקולטת מהמשתמש מייל בודקת את תיקנותו(אם הוא נכתב כמו שצריך[לדוגמא @] ושומרת את המייל בתוך מערך מוקצה דינמיתהבעיה היא שאני לא יודע איך לבצע את ההקצאה הדינמית אחרי שהמשתמש הכניס את הנתוניםתודה לכל מי שיכול לעזור :-)
פורסם 2011 בדצמבר 3113 שנים מחבר כןאבל אני די חדש בתיכנות בשפת Cלפי מה שאני יודע malloc מגדירה לי מערך מוקצה כאשר אני יודע מה הוא מספר האיברים שליאך הדבר הראשון שאני עושה הוא לקלוט מהמשתמש את האימייל... אני לא מבקש ממנו להכניס "כמה תווים האמייל שלך מכיל: ___"אז אני קולט באמצעות getchar את הנתונים ומתחיל לבדוק כל תו שנכנס, השאלה היא איך אני שומר את כל האימייל אחרי שכל התווים הוכנסו לתוך המערך?
פורסם 2011 בדצמבר 3113 שנים תתחיל מגודל X. אם הגעת לגודל הזה, תקצה מערך בגודל כפול (או + 10 או מה שבא לך), ותעתיק אליו את התווים שכבר קלטת מהמשתמש וחוזר חלילה.
פורסם 2011 בדצמבר 3113 שנים מחבר ניסתי לעשות את זה אבל הוא נותן לי שגיאה:run-time check failure #3 - the variable 'newemail_arr' is being used without being initialized#define N 10char check_email(char email_c, char email_arr[], int corrent) { char *newemail_arr; int x; int multiplayer=1; if(!isdigit(email_c) && !isspace(email_c) && (isalpha(email_c) || email_c=='@')) { /* allocate memory for array */ if(corrent>=(N*multiplayer)) { multiplayer++; newemail_arr=(char *)malloc((N*multiplayer)*sizeof(char)); if(newemail_arr==NULL) { printf("could not allocate memory\n"); exit(1); } } /* the end of - allocate memory for array */ email_c = tolower(email_c); if(multiplayer > 1) email_arr[corrent] = email_c; else newemail_arr[corrent] = email_c; } printf("\n"); if(corrent>=N) free(newemail_arr); return 1;}ושניצל אני עכשיו אקרא על הפונקציה שאמרת אני אבדוק מה היא עושה ואיך היא עובדת
פורסם 2011 בדצמבר 3113 שנים מחבר אוקי השתמשתי בפוקנציה reallocאבל בפעם השניה שהתוכנית משתמשת בה - התוכנה מציגה שגיאה:expression: _CrtIsVaildHeapPointer(pUserData)for information.......בפעם הראשונה שהתוכנה מבצעת את הפוקנציה אין בעיה אך בפעם השניה התוכנית עושה שגיאההנה התוכנית:#include <stdio.h>#include <stdlib.h>#include <ctype.h>#define N 20int create_email(char email_c, char email_arr[], int corrent, int *multiplayer) { if(corrent == N*(*multiplayer)) { (*multiplayer)++; realloc(email_arr,N*((*multiplayer))*sizeof(char)); } if(!isdigit(email_c) && !isspace(email_c) && (isalpha(email_c) || email_c=='@')) { email_arr[corrent] = tolower(email_c); return 1; } else return 0;}int main() { char c; int i=0, x; int *multiplayer; int counter=1; char *email_arr; multiplayer = &counter; /* allocate memory for array */ email_arr=(char *)calloc(N,sizeof(char)); if(email_arr==NULL) { printf("could not allocate memory\n"); exit(1); } /* the end of - allocate memory for array */ while(((c=getchar()) != EOF) && c!='\n') { i+=create_email(c, email_arr, i, multiplayer); } printf("\n"); for(x=0; x<i; x++) printf("%c", email_arr[x]); printf("\n");return 0;}
פורסם 2012 בינואר 113 שנים אתה לא משתמש ב-realloc נכון. תקרא איך אמורים להשתמש בה.אגב, שיטה יותר מומלצת היא כל פעם להגדיל את המערך פי 2, ולא להוסיף לו גודל קבוע כל פעם.
פורסם 2012 בינואר 113 שנים מחבר אז איך אני צריך להשתמש בה?ניסתי כבר כמה וכמה דרכיםאו שמופיעה שגיאה או שהתוכנית פשוט קורסת...
פורסם 2012 בינואר 113 שנים מחבר אוקי תודה הסתדרתי עם ה realloc הבעיה היתה במקום אחר וגרמה לכמה בעיות בתוכנית ... תודה
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.