假设我们有文件,其中包含:如何从文件中获取int和string并将其保存在结构中?
1 John
2 Alex
3 Michael
我们可以通过fscanf()
功能得到一条线,但如何将其保存到以下结构:
typedef struct entry {
int n;
char *name;
} entry_t;
我想创建数组结构并将文件中的值保存到它,并动态执行。我试过这样做
entry_t *prt = malloc (size * sizof(entry_t));
//opening file
prt[0].name = malloc (sizeof("John"));
fscanf (fp,"%d %s", prt[0].n, prt[0].name);
好吧,它的工作原理,但如何在从文本文件获取它之前分配内存为每个名称? 我决定使用结构数组,因为我会用它来实现散列表。
您不能分配_before_,因为您不知道大小。 'strlen'你的每个名字都来自文件然后'malloc' – mihai
你至少有两个选择。 (1)大多数可移植的:'char buffer [1024]; if(fscanf(fp,“%d%1023s”,&prt [0] .n,buffer)== 2){prt [0] .name = strdup(buffer); ...检查strdup后使用值工作...}其他{...处理错误...}'它使用一个大缓冲区来读取值,然后分配内存;或者(2)使用['fscanf()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/fscanf.html)的POSIX特性:'if(fscanf(fp,“%d%ms” ,&prt.n,&prt [0] .name)== 2){...使用值读取...} else {...处理错误...}'。请注意第一次通话的大小限制。 –
对'fscanf()'的调用不应该编译 - 你省略了文件指针参数。 –