gpt4 book ai didi

c - 倒带文件,创建动态结构

转载 作者:行者123 更新时间:2023-11-30 15:23:21 26 4
gpt4 key购买 nike

此函数将倒带文件,创建动态数组(大小),并读入数据,填充 _data 结构动态数组。请注意流这次是按值传递的。然后该函数返回填充的结构体数组

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);
}

关于c - 倒带文件,创建动态结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28823218/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com