2012-05-21 3 views
0

mongodb c 드라이버가 사용하는 함수에 약간 문제가 있습니다.이 인스턴스의 함수에서 반환 된 const char 포인터를 사용하는 방법은 무엇입니까? (mongodb 관련)

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에서 볼 :

나는 다음과 같은 방식으로 사용할 수있는 시도하고있어

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

을 : 문제의 기능은 다음과 같습니다

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

내가 잘못하고있는 것이 확실하지 않습니다. 필자가 지정하는 필드는 gridfs에 저장하는 모든 파일에 존재하기 때문에 그럴 것 같지 않습니다 (나중에 "파일 포함 :"에 파일이 없으면 지정하지 않습니다). 나는 포인터에 관해서 뭔가 잘못하고 있다고 생각한다. 누구든지 어떤 제안이라도 있으면, 그것은 굉장 할 것입니다. 당신이 가장 가능성이 뭔가 잘못하고있는 당신이 함수의 반환 값을 캐스팅 할 필요를 느끼는 경우

편집 : 진짜 선언은

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

실제 선언문을'gridfile_get_field'로 보여 주어야합니다. –

답변

0

(귀하의 컴파일러는 아마 높은 순서 비트와 char*로 재 해석이의 상처를 int를 반환하는 기능을 가지고있다) MongoDB C 드라이버의 문제 일 수 있습니다. 올바른 정보를 반환하지 않았습니다. 나는이 문제가 곧 발표 될 것이라고 생각한다.

0

입니다.

먼저 filenamechar const*으로 선언해야 함수에서 반환 할 것으로 예상됩니다.

아마도이 기능에 대한 정확한 프로토 타입이 없을 것입니다. 함께 제공되는 포함 파일이 있어야합니다. 마지막 수단으로

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

같은 프로토 타입을 선언 밝혀졌다

+0

filename을 char const *로 변경했으나 작동하지 않았습니다. 이제는 "5"를 반환합니다. 포함 된 함수는 "const char * gridfile_get_field (gridfile * gfile, const char * name);"입니다. 수정을 시도했지만 효과가 없었습니다. –

+0

당신의 코멘트는'const char *'라고 당신이 코멘트를'char const *'에 편집했습니다. 무엇 이니? –

+0

죄송합니다! 'char const *'와'const char *'는 동일합니다. –