C语言是一种非常低级的语言,因此您需要决定如何处理每个字段。
你的情况,你需要决定什么是name,谁拥有尖的数据和代码得当,或许是这样的:
typedef struct person_st {
char* name; // malloc-ed string
int age;
} Person;
// allocate a Person of given name and age
Person* make_person(const char* n, int a) {
if (!n || a<0) return NULL;
Person* p = malloc(sizeof(Person));
if (!p)
perror("malloc Person"), exit(1);
p->name = strdup(n);
if (!p->name)
perror("strdup Person"), exit(1);
p->age = a;
return p;
}
// destroy a Person and the data inside
void destroy_person(Person*p) {
if (!p) return;
free (p->name);
free (p);
}
// read and allocate a Person
Person* input_person(FILE*f) {
if (!f) return NULL;
char name[104];
int age;
memset (name, 0, sizeof(name));
age = 0;
if (fscanf(f, " %100[A-Za-z] %d", &name, &age)<2)
return NULL;
return make_person(name, age);
}
与的input_person调用者应该适当地调用destroy_person的惯例。
我可能误解了你的问题。你想简单地编写一个variadic function(与输入或输出无关)?然后仔细使用 header。请注意,C中的可变参数函数输入很差。使用GCC,您可以输入sentinel function attribute,您甚至可以自定义GCC例如用MELT添加一些类型检查。