0

mongodb c ドライバーが使用する aa 関数に少し問題があります。問題の関数は次のようになります。

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 に保存しているすべてのファイルに存在するため、そうではないと思います (存在しないものを "file contains: " のファイルだけに指定し、その後に文字はありません)。私はポインターに関して何か間違ったことをしていると思います。誰かに何か提案があれば、それは素晴らしいことです。

編集::実際の宣言は

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

2 に答える 2

0

関数の戻り値をキャストする必要があると感じた場合は、何か間違ったことをしている可能性があります。

これは関数が返すと予想されるものであるため、最初に、あるfilenameとして宣言する必要があります。char const*

次に、関数の正しいプロトタイプを持っていない可能性があります。付属のインクルード ファイルが必要です。最後の手段として、プロトタイプを次のように宣言します。

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

(あなたのコンパイラは、おそらくint上位ビットの , カットを返す関数を取り、これを として再解釈していますchar*)

于 2012-05-21T20:12:22.867 に答える
0

MongoDB C ドライバーの問題であることが判明しました。正しい情報が返されませんでした。この問題は、今後のリリースで対処されると思います。

于 2012-06-04T18:05:45.947 に答える