ABA


"שאלה בשפת C- מערכים"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #7060 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 7060
chenke 
חבר מתאריך 1.7.02
730 הודעות
   11:50   30.09.03   
אל הפורום  
  שאלה בשפת C- מערכים  
 
   כתבתי תוכנית שפותחת קובץ טקסט ומעתיקה את השורות שלו לתוך מערך מחרוזות. הגדרתי את המערך כך: char * lines, כלומר מערך מחרזות בעל 500 איברים. השאלה שלי היא: האם יש אפשרות להגדיר את המערך שיהיה בעל איבר אחד וכל שורה שקוראים מקובץ להגדיל את מספר האיברים שבו באחד (חוץ משמוש במצביעים). ניסית שמוש ב- realoc ולא הצלחתי.

תודה מראש לכל העוזרים,

חן


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  אפשר, (בעזרת Realloc) אבל יש פתרונות אחרים dryice 30.09.03 13:03 1
     איך אפשר להשתמש ב- realoc כדי להוסיף איברים ל chenke  30.09.03 13:52 2
         שימוש נכון בrealloc: dryice 30.09.03 17:30 3
             תודה הסתדרתי chenke  01.10.03 07:33 5
     אין הכרח לחסם עליון: Dudenland 30.09.03 20:49 4

       
dryice

   13:03   30.09.03   
אל הפורום  
  1. אפשר, (בעזרת Realloc) אבל יש פתרונות אחרים  
בתגובה להודעה מספר 0
 
   בעיקר שימוש ברשימה מקושרת. Realloc למעשה מקצה זכרון מחדש, מעתיק את המידע שהוקצה כבר
ומשחרר את הישן, קל לראות שזה לא ממש יעיל.
מהשאלה שלך לא ממש ברור אם יש לך חסם עליון לאורך של שורה או לא. האם אתה קורא למחרוזת
באורך קבוע, או מקצה מערך בגודל מתאים?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
chenke 
חבר מתאריך 1.7.02
730 הודעות
   13:52   30.09.03   
אל הפורום  
  2. איך אפשר להשתמש ב- realoc כדי להוסיף איברים ל  
בתגובה להודעה מספר 1
 
   גודל שורה מקסימלי שך 300 תוים. איך אפשר להשתמש ב- realoc כדי להוסיף איברים למערך?

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

תודה מראש,

חן
http://rotter.net/User_files/nor/3f7960492f5968cd.txt


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dryice

   17:30   30.09.03   
אל הפורום  
  3. שימוש נכון בrealloc:  
בתגובה להודעה מספר 2
 
   בשביל להשתמש בrealloc המערך חייב להיות מוקצה דינאמית מלכתחילה:


lines=(char **)malloc(sizeof(char *)*INITIAL_SIZE);

בשביל להגדיל את המערך:


lines=(char **)realloc(lines,sizeof(char *)*NEW_SIZE);

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
chenke 
חבר מתאריך 1.7.02
730 הודעות
   07:33   01.10.03   
אל הפורום  
  5. תודה הסתדרתי  
בתגובה להודעה מספר 3
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Dudenland

   20:49   30.09.03   
אל הפורום  
  4. אין הכרח לחסם עליון:  
בתגובה להודעה מספר 1
 
   בדיוק באותה צורה שאתה מכניס רשימת מחרוזות בגודל משתנה (שאינו ידוע מראש) באמצעות שימוש ביכולות הרשימה המקושרת, ניתן להכניס מחרוזות בעלות גודל משתנה.
מחרוזת היא גם-כן מערך של אוסף תווים, ולכן ניתן לממש אותו באמצעות רשימה מקושרת.
למעשה, תהיה לך רשימה מקושרת בתוך רשימה מקושרת...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net