如何通过指针访问CSV文件并把指针读取到的值赋值给结构体
时间: 2024-12-15 19:20:03 浏览: 4
在C语言中,通过指针访问CSV文件并解析数据通常涉及到文件操作、内存管理和字符串处理。这里是一个基本的例子,假设我们有一个简单的结构体(struct)和对应的CSV文件:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 假设我们有这样一个结构体
typedef struct {
char name[50];
int age;
} Person;
// 打开CSV文件并读取
void read_csv(char *filename, Person *persons, int *count) {
FILE *file = fopen(filename, "r");
if (file == NULL) {
printf("Failed to open file.\n");
return;
}
*count = 0; // 初始化记录数
char line[1024]; // 存储一行的数据
while (fgets(line, sizeof(line), file)) { // 指针逐行读取
Person person;
char *token = strtok(line, ",");
// 分割每个字段并赋予结构体成员
strncpy(person.name, token, sizeof(person.name) - 1); // 去除尾部换行符
person.age = atoi(strtok(NULL, ",")); // 转换年龄为整数
persons[*count] = person; // 将结构体添加到数组
(*count)++;
}
fclose(file);
}
int main() {
const char *csv_file = "example.csv";
Person *people = malloc(sizeof(Person)); // 分配存储结构体的空间
int num_people;
read_csv(csv_file, people, &num_people); // 调用函数
for (int i = 0; i < num_people; i++) {
printf("Name: %s, Age: %d\n", people[i].name, people[i].age);
}
free(people); // 释放内存
return 0;
}
```
在这个例子中,`read_csv`函数通过`fopen`打开文件,并使用`fgets`逐行读取。然后使用`strtok`分割每行数据,将其分配给结构体的相应成员。最后,将处理过的结构体实例放入`Person`数组。
阅读全文