נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: מצביע למבנה בשפת C - חשוב!!

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
nemesh
משתמש מתחיל
משתמש מתחיל
סמל אישי

הצטרף / הצטרפה: 19 April 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 26
נשלח בתאריך: 20 May 2007 בשעה 22:57 | IP רשוּם
ציטוט nemesh

ערב טוב,

אני אמורה לכתוב תוכנה די רצינית ואני תקועה בהתחלה אז עזרתכם ממש חשובה לי עכשיו.

אני הגדרתי מבנה נתתי לו שם והגדרתי לו מצביע.

עשיתי הקצאה דינמית של מקום אבל זה לא עובר קומפילציה ואני לא מבינה למה...תראו רגע

קוד:
typedef struct s_student {
    long id;    //SIZE IS     9
    char *first[10];         //SIZE IS    10
    char *second[10];        //SIZE IS    10
    char subjects[8][6];  //SIZE IS    48
} Student;

s_student *Pstudent;

if ((Pstudent = (s_student *) malloc(MAX_SIZE))==NULL) // allocate memory for the stusent stract

exit(1);

מבחינת הכתיב זה כתוב יפה בC פשוט אני לא מסתדרת אם האתר כבר אמרו לי מה לעשות ולא יוצא לי.

תגידו לי בבקשה למה זה לא מתקמפל

ועוד משהו איך אני שולחת את המבנה לפונקציה?

void add_dtudent(FILE* in,FILE *out, s_student *Pstudent)

ע"י מצביע נכון??

תודה לרבה לכם שהקדשתם את זמנכם

לילה טוב



__________________
תודה רבה,
Nemesh
חזרה לתחילת העמוד הצג את כרטיס החבר של nemesh חפש הודעות אחרות של nemesh
 
צחי@
משתמש חבר
משתמש חבר


הצטרף / הצטרפה: 02 January 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 209
נשלח בתאריך: 21 May 2007 בשעה 06:51 | IP רשוּם
ציטוט צחי@

קוד:

#include <stdlib.h>

#define MAX_SIZE 10

typedef struct s_student
{
 long id;    //SIZE IS     9
 char *first[10];         //SIZE IS    10
 char *second[10];        //SIZE IS    10
 char subjects[8][6];  //SIZE IS    48
           
} Student;

int main(int argc, char **argv)
{
 Student *Pstudent;

 if((Pstudent = (Student*)malloc(MAX_SIZE * sizeof(Student)))==NULL) // allocate memory for the stusent stract
  exit(1);

   return 0;
}

היו לך כמה סוגריים חסרות, והשתמשת ב-s_student במקום ב-Student כמו שאמורים לעשות אחרי הגדרת typedef.

typedef struct s_student מגדיר "כינוי" ל-struct s_student. אם את רוצה להשתמש ישירות ב-s_student, תגדירי אותו ללא typedef ותוסיפי struct לפני כל מופע של השם s_student:

קוד:

struct s_student
{
 long id;    //SIZE IS     9
 char *first[10];         //SIZE IS    10
 char *second[10];        //SIZE IS    10
 char subjects[8][6];  //SIZE IS    48
            
 struct s_student *Pstudent;

 if((Pstudent = (struct s_student*)malloc(MAX_SIZE * sizeof(struct s_student)))==NULL) // allocate memory for the stusent stract
  exit(1);

אני לא יודע אם זאת הכוונה שלך, אבל בדוגמה שאני צרפתי - אני מקצה מערך בגודל MAX_SIZE של Students.

malloc מקצה בייטים, ולכן צריך לכפול את מס' האיברים שרוצים להקצות בגודל ה-struct.

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

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

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

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