【发布时间】:2015-01-24 13:48:44
【问题描述】:
假设我有这样的结构
typedef struct _student {
int studentID;
char name[30];
char class[10];
char department[10];
} Student;
以下函数会创建 Student 类型的新变量:
Student *new_student(int id, char *name, char *class, char *dept) {
Student *s = (Student *)malloc(sizeof(Student *));
s->studentID = id;
strncpy(s->name, name, sizeof(s->name) - 1);
s->name[sizeof(s->name) - 1] = '\0';
strncpy(s->class, class, sizeof(s->class) - 1);
s->class[sizeof(s->class) - 1] = '\0';
strncpy(s->department, dept, sizeof(s->department) - 1);
s->department[sizeof(s->department) - 1] = '\0';
return s;
}
void display_student(Student *s) {
printf("Student: %d | %s | %s | %s\n", s->studentID, s->name, s->class, s->department);
}
为了测试我的代码,我只是在我的 main() 中写了一些简单的东西
int main() {
Student *s1 = new_student(20111201, "Lurther King Anders Something", "ICT-56", "SoICT");
Student *s2 = new_student(20111202, "Harry Potter", "ICT-56", "SoICT");
Student *s3 = new_student(20111203, "Hermione Granger", "ICT-56", "SoICT");
Student *s4 = new_student(20111204, "Ron Weasley", "ICT-56", "SoICT");
display_student(s1);
display_student(s2);
display_student(s3);
display_student(s4);
return 0;
}
但是,结果对我来说是出乎意料和奇怪的:
谁能帮我解释一下为什么会出现奇怪的结果!我认为我以正确的方式做事,我已经应用了 strncpy 的安全使用,但我不理解输出。
【问题讨论】: