c语言读取csv文件到结构体

在C语言中,读取CSV文件内容的方法有很多,这里我将介绍一种较为简单且易于理解的方法,CSV文件是一种逗号分隔值(CommaSeparated Values)的文件格式,通常用于存储表格数据,在C语言中,我们可以使用标准库中的文件I/O函数和字符串处理函数来读取CSV文件的内容。

c语言读取csv文件到结构体
(图片来源网络,侵删)

以下是一个简单的C语言程序,用于读取CSV文件的内容并将其打印到控制台:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义一个结构体,用于存储CSV文件中的每一行数据
typedef struct {
    char *data;
    size_t length;
} CsvRow;
// 从CSV文件中读取一行数据
CsvRow read_csv_row(FILE *file) {
    char line[1024];
    CsvRow row;
    if (fgets(line, sizeof(line), file) == NULL) {
        return (CsvRow){NULL, 0};
    }
    row.length = strlen(line);
    row.data = malloc((row.length + 1) * sizeof(char));
    strncpy(row.data, line, row.length);
    row.data[row.length] = '0';
    return row;
}
// 释放CSV文件中读取到的数据
void free_csv_row(CsvRow row) {
    if (row.data != NULL) {
        free(row.data);
    }
}
int main() {
    FILE *file = fopen("example.csv", "r");
    if (file == NULL) {
        printf("无法打开文件: example.csv
");
        return 1;
    }
    CsvRow row;
    while ((row = read_csv_row(file)).data != NULL) {
        printf("%s", row.data);
        free_csv_row(row);
    }
    fclose(file);
    return 0;
}

我们定义了一个名为CsvRow的结构体,用于存储CSV文件中的每一行数据,结构体包含两个成员:datalengthdata是一个指向字符数组的指针,用于存储行数据;length是一个整数,表示行数据的长度。

接下来,我们实现了两个辅助函数:read_csv_rowfree_csv_rowread_csv_row函数接受一个指向FILE类型的指针,用于表示要读取的CSV文件,函数首先使用fgets函数从文件中读取一行数据,然后计算该行数据的长度,并为data成员分配足够的内存空间,接着,使用strncpy函数将读取到的数据复制到data成员中,并在末尾添加一个空字符(’