לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 29-03-2012, 17:58
  CM0S CM0S אינו מחובר  
 
חבר מתאריך: 17.03.02
הודעות: 2,354
בעיה בקליטת מחרוזת (יותר נכון: רצף של מחרוזות) ב-C

שלום,

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

תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה

ניסיתי להבין מאיפה הבעיה, לא הצלחתי.
הנה הקוד, אשמח אם מישהו יזרוק עצם:

main:

קוד PHP:
 int main() {
    
char *line;
    
line readLine();
    while(
strcmp(line"!quit")) {
        
free(line);
        
line readLine();
    }
    
free(line);



(חשדתי שהבעיה היא עם שחרור הזיכרון שאני עושה, אבל גם אם אני מנסה להוריד את השורה הזו, הבעיה נותרת. מה גם שהגיונית לא אמורה להיות עם זה בעיה.)

הפונקציה readLine:

קוד PHP:
 char *readLine() {
    
char *line;
    
int phsizelsizec;
    
phsize 1;
    
lsize 0;
    
line = (char *) malloc((phsize) * sizeof(char));
    if(!
line) {
        
printf("Error allocating memory. exiting...");
        exit (
1);
    }
    while( (
getchar()) != '\n') {
        if(
lsize == phsize) {
            (
char *) realloc(line, (phsize*2)*sizeof(char));
            if(!
line) {
                
printf("Error allocating memory. exiting...");
                exit (
1);
            }
            
phsize *= 2;
        }
        
line[lsize++] = c;
    }
    (
char *)realloc(line, (lsize)*sizeof(char));
    
line[lsize] = '\0';
    return 
line;




תודה!
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #5  
ישן 29-03-2012, 18:37
צלמית המשתמש של פסטן
  פסטן פסטן אינו מחובר  
 
חבר מתאריך: 14.12.09
הודעות: 9,751
בתגובה להודעה מספר 4 שנכתבה על ידי CM0S שמתחילה ב "תודה :) אגב, ראיתי בכמה..."

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

השאלה היא למה בכלל צריך לשים את הקאסט הזה?
ב-CPP אתה חייב, כי אין קאסט אוטומטי בין הפויינטרים: http://ideone.com/clone/6xQks
אבל ב-C יש: http://ideone.com/HVybU ולא ברור מה הקאסט מוסיף. במקרים אחרים, אפשר להגיד שהקאסט עוזר לשים לב שמתבצעת המרה בין טיפוסים שונים, אבל כאן יש malloc - מובן מאליו שאיפשהו נעשה קאסט, כי אי-אפשר להשתמש ב-void*‎ ישירות...

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

אמר פסטן: שניהם גרועים, אבל עדיף להיות טיפש מאשר שקרן.
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 02:47

הדף נוצר ב 0.04 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר