【问题标题】:I don't know how to use the parameter of some functions in libcsv我不知道如何使用libcs​​v中某些函数的参数
【发布时间】:2015-01-06 22:33:22
【问题描述】:

所以我有一个正在进行的项目,我正在尝试使用libcsv。 从doc,我了解到csv_parse() 需要

"a pointer to a callback function (cb1) that will be called from csv_parse()
 after an entire field has been read. cb1 will be called with a pointer to the
 parsed data (which is NOT nul-terminated unless the CSV_APPEND_NULL option is 
set), the number of bytes in the data, and the pointer that was passed 
to csv_parse()."

我给 csv_parse 作为回调调用的函数(在读取现有文件并尝试用它填充结构时)是:

void cb1_db_populate(void *s, size_t len, void *data)
{
    int row = ((struct DB *)data)->currRow, field = ((struct DB *)data)->currField;
    str = (char *)s;
    printf("%s\n", str);
}

而且我不知道如何使用该void *s,因为我的数据库中有多种数据类型,例如 char *int等等... 目前我只想能够正确打印它,我的代码在第一次调用该函数时工作,但在那之后,字符串(当然是char的数组)长度存在问题。

示例
2014-11-04
07.5011-04
课程晚会
晚会
2014-11-05入围
30.5011-05irée
carburant5irée

如何知道_void_后面隐藏了哪个指针,以及如何正确使用(打印、操作...)?

希望我说的很清楚,非常感谢:)


我现在使用的解决方案可以让我得到一个正确的字符串,我可以在需要时无错误地打印或传递给 atoi()/atof():

char *str = malloc(sizeof(char)*len);
memcpy(str, (char *)s, len);  
printf("%s\n", str);  

【问题讨论】:

    标签: c pointers csv callback void


    【解决方案1】:

    您在第 7 页链接到的文档中有一个很好的示例,说明了如何使用它。

    回调函数cb1 如下所示:

    void cb1 (void *s, size_t len, void *data) {
    }
    

    因此,您将传递一个指向 void(*)(void*, size_t, void*) 的指针。

    编辑:

    目前我只想能够正确打印它, 我第一次调用函数时的代码,但之后 那,字符串有问题(当然是char数组) 长度。

    这些字符串不是以空值结尾的,你不能像普通的 cstrings 一样将它们传递给 printf。 请改用printf("%.*s\n", len, str);

    而且我不知道如何使用那个 void *s,因为我的数据库中有几种数据类型,比如 char * 和 int 等等......

    void* 是指向 csv_parser 结构的数据字段的指针。它指向从文件/数据库中读取的原始数据。 如果您的 CSV 包含文本,则此数据为文本,您可以将 void* 转换为 char*。如果您的 CSV 包含以原始 32 位二进制形式编码的数字(因此,不是文本),那么您可以将该 void* 转换为 uint32_t*。

    大多数时候,您可能希望将其读取为 char*,但您的工作是了解这些文件中的内容。解析器看到的只是一堆字节。

    【讨论】:

    • 这我知道,我已经制作了自己的回调函数,它被 csv_parse() 正确调用,但我无法使用它给我的方式。
    猜你喜欢
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    相关资源
    最近更新 更多