此函数将倒回文件,创建(具有大小的)动态数组,并读取数据,以填充_data结构动态数组。请注意,这次流是按值传递的。然后,该函数返回填充的struct数组
struct _data
{
char* name;
long number;
};
struct _data *load(FILE *stream, int size)
{
struct _data BlackBox = calloc(size, sizeof(_data));
char tempName[3];
stream = fopen("names.txt", "r");
for (int i=0; i<size; i++)
{
fscanf(stream, "%s %ld", tempName, &data.number);
BlackBox[i].name = calloc(strlen(tempName), sizeof(char));
strcpy(BlackBox[i].name, tempName);
}
fclose(stream);
return &BlackBox;
}
File Content
ron 7774013
jon 7774014
我是一个初学者,在设计代码时遇到困难。有人可以解释一下。谢谢
我认为您会收到gcc的一些警告以帮助您。
使用calloc修复内存管理,并且不返回堆栈指针
typedef struct _data
{
char* name;
long number;
} _data;
_data *load(FILE *stream, int size)
{
_data *BlackBox = calloc(size, sizeof(_data));
char tempName[3];
for (int i=0; i<size; i++)
{
fscanf(stream, "%s %ld", tempName, &BlackBox[i].number);
BlackBox[i].name = strdup(tempName);
}
fclose(stream);
return BlackBox;
}
int main (void)
{
FILE *f = fopen("test.data", "r");
_data *data = load(f, 2);
printf("%s %ld\n", data[0].name, data[0].number);
printf("%s %ld\n", data[1].name, data[1].number);
return 0;
}
输出
aurel@vm-pontarlier:~$ ./a.out
ron 7774013
jon 7774014
考虑变更_data
typedef struct _data{
char name[256];
long number;
} _data;
扫描将是:
for (int i=0; i<size; i++)
{
fscanf(stream, "%s %ld", BlackBox[i].name, &BlackBox[i].number);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句