【发布时间】:2016-03-23 18:01:12
【问题描述】:
我意识到这个问题经常被问到,但我仍然不明白它是如何工作的。我想尝试将我的文件读入我的结构中,在函数内部,并通过指向函数的指针传递结构。我不确定如何编写函数原型。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 90
#define STR 200
#define MAXLEN 40
struct human {
char name[MAXLEN];
char surname[MAXLEN];
int age;
float weight;
};
int main(int argc, char *argv[]) {
char *dlim= " ", *end = "\n";
char *string;
string = (char *)malloc(sizeof(char) * STR);
int i = 0, j = 0;
struct human *man = malloc(sizeof(struct human) * MAX);
FILE *fin = fopen("data.txt", "r");
if (fin == NULL) {
printf("Cannot open file\n");
exit(0);
}
while (fgets (string, STR, fin)){
read (string, &man[i], dlim, end);
i++;
}
fclose(fin);
free(string);
free(man);
return 0;
}
struct human *man read(char *fstring, struct *man, char *div, char *end){
int i=0;
char *tok;
tok = strtok(string, dlim);
strcpy(man[i].name, tok);
tok = strtok(NULL, dlim);
strcpy(man[i].surname,tok);
tok = strtok(NULL, dlim);
man[i].age = atoi(tok);
tok = strtok(NULL, end);
man[i].weight = atof(tok);
return man[i];
}
这个函数应该是什么样子的?我是否正确假设通过使用指针,结构将在 main 中自动更新,而无需在函数中返回某些内容?
函数是否也可以不返回任何内容(void),因为指针的使用会自动传递给 main?
谢谢!
【问题讨论】:
-
函数 read 必须返回一些东西。您不需要返回结构人类指针。您已经传递了一个指向要填充的结构的指针。如果成功,最好返回 0,如果失败则返回非零错误代码。这是典型的行为。
标签: c arrays function pointers struct