gpt4 book ai didi

c - 如何从文件中获取 int 和 string 并将其保存在结构中?

转载 作者:太空宇宙 更新时间:2023-11-04 02:32:41 25 4
gpt4 key购买 nike

假设我们有包含以下内容的文件:

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

好的,它可以工作,但是如何在从文本文件中获取名称之前为每个名称分配内存?我决定使用结构数组,因为我将用它来实现哈希表。

最佳答案

sizeof("John") 适用于字符串文字,但文件中的名称事先未知,因此必须动态确定大小。 p>


  1. 使用 fgets() 读取一行。

  2. 使用 sscanf()strtol()strtok() 来解析该行。

    <

例子:

int read_entry(FILE *istream, struct entry *record) {
char buf[200];
if (fgets(buf, sizeof buf, istream) == NULL) return -1; // EOF
buf[strcspn(buf, "\n")] = 0; // lop off potential trailing \n

int start;
int end = 0;
sscanf(buf, "%d %n%*s%n", &record->n, &start, &end);

if (end == 0) {
return 0; // failed to parse
}
record->name = strdup(&buf[start]);
return 1; // Success
}

用法

struct entry record;
while (read_entry(stdin, &record) == 1) {
printf("%d '%s'\n", record.n, record.name);
...
// when done with the record,
free(record.name);
}

strdup() 是“复制”字符串的常用方法,但它不是标准 C 库的一部分。很容易编码:Example implementation

关于c - 如何从文件中获取 int 和 string 并将其保存在结构中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41190836/

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