0

私が記入することになっているコードは、十分に簡単でした。

#define MAX_NAME_LEN 128
typedef struct {
 char name[MAX_NAME_LEN];
 unsigned long sid;
} Student;
/* return the name of student s */
const char* getName(const Student* s) {
 return s->name;
}
/* set the name of student s */
void setName(Student* s, const char* name) {
 /* fill me in */
}/* return the SID of student s */
unsigned long getStudentID(const Student* s) {
 /* fill me in */
}
/* set the SID of student s */
void setStudentID(Student* s, unsigned long sid) {
 /* fill me in */
}

しかし、それは次の関数の論理エラーは何であるかを示していますか?

Student* makeDefault(void) {
 Student s;
 setName(&s, "John");
 setStudentID(&s, 12345678);
 return &s;
}

問題はありません。私はそれをテストしました。正常に動作します。

これはおそらくvoid関数であり、何も返す必要がないためですか?

4

1 に答える 1

0

ローカルで宣言された変数(Student s)へのポインターを返すことはできません。変数「s」は、戻った後に消えます(ゴミになります)。

代わりに、最初に学生を割り当てる必要があります。

あなたはおそらくこれを行うべきです:

void makeDefault(Student* pS) {
 setName( pS, "John");
 setStudentID( pS, 12345678);
}

次に、呼び出し元のアプリケーションに生徒を割り当てさせます。

于 2013-02-15T08:28:29.320 に答える