2013-04-25 4 views
1

lfind 및 bsearch가 발견 된 요소에 대한 포인터를 반환 한 후 배열에서 요소의 인덱스를 가져 오려고합니다. 지금까지이 있습니다bsearch 및 lfind에서 색인을 찾으십니까?

cvector :

FOUND는 기능 찾았는지의 주소를, 그리고 기본 주소는 그러나 요소 0의 주소입니다
(char *) (found - cv->baseAddress); 

이 컴파일러는 나에게 오류를 제공합니다. c : 150 : 28 : warning : 빼기에 사용 된 'void *'유형의 포인터 cvector.c : 150 : 4 : 경고 : 캐스트가없는 포인터에서 정수를 반환합니다.

어떻게해야합니까?

답변

2

반환 된 포인터를 올바른 유형으로 유형 변환해야합니다. 그런 다음 인덱스를 얻기 위해 배열의 객체 크기와 함께 얻는 오프셋을 나눌 필요가 있습니다.

+0

그러면 다음과 같이 보일 수 있습니다. * (int *) (char *) found - cv-> baseAddress/elemSize? @ Joachim Pileborg – girlrockingguna

+0

bsearch() (및 요소 배열의 유형)에 대한 호출을 표시하지 않고는 실제로 말할 수 없습니다. – Medinoc

+2

@ girlrockingguna 거의 괄호가 필요하다. 그렇지 않으면 나눗셈이 잘못 될 것이다 :'((typeOfentries *) found - cv-> baseAddress)/sizeof (typeOfEntries)'. –