【问题标题】:How to use const char pointer returned from a function in this instance? (mongodb related)在这种情况下,如何使用从函数返回的 const char 指针? (mongodb相关)
【发布时间】:2012-05-21 19:53:47
【问题描述】:

我在使用 mongodb c 驱动程序使用的函数时遇到了一些问题。有问题的函数如下所示:

gridfile_get_field (gridfile *gfile, const char *name) (returns const char *)

我正在尝试以下列方式使用它:

const char * field = "file";
char * filename;
filename = (char *)gridfile_get_field(&gfile, field);
FILE * file;
file = fopen("test.txt", "a+");
fprintf(file, "file contains: %s\n", filename);
fclose(file);

但是,执行后,我在 test.txt 中看到了这个:

file contains: ^A
file contains: ^A
file contains: ^A

我不确定我做错了什么。我指定的字段存在于我存储在 gridfs 中的所有文件中,所以我不认为是这种情况(指定不存在的内容只是“文件包含:”中的文件,之后没有字符)。我想我在指针方面做错了。如果有人有任何建议,那就太好了。

EDIT:: 真正的声明是

const char * gridfile_get_field (gridfile *gfile, const char *name);

【问题讨论】:

  • 你需要出示gridfile_get_field的真实声明

标签: c mongodb pointers gridfs const-char


【解决方案1】:

如果您觉得需要强制转换函数的返回值,那么您很可能做错了什么。

首先,您应该将filename 声明为char const*,因为这是您希望函数返回的内容。

那么,您可能没有正确的函数原型。您应该有一个随附的包含文件。作为最后的手段,将原型声明为

char const * gridfile_get_field (gridfile *gfile, const char *name);

(您的编译器可能正在使用该函数返回int,削减高位并将其重新解释为char*

【讨论】:

  • 我将文件名更改为 char const*,但这不起作用 - 现在它只返回“5”。包含的函数是“const char *gridfile_get_field(gridfile *gfile, const char *name);”我尝试修改它,但它没有效果。
  • 您在此处的评论为 const char*,但您将帖子编辑为 char const *。是哪个?
  • 糟糕! char const *const char * 是一样的。
  • 它是 const char *。对此我深表歉意 - 文档有点参差不齐。
【解决方案2】:

原来是 MongoDB C 驱动程序的问题 - 它没有返回正确的信息。我认为这个问题将在即将发布的版本中得到解决。

【讨论】:

    猜你喜欢
    • 2016-06-10
    • 2016-05-15
    • 1970-01-01
    • 2015-01-04
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多