2013-11-21 2 views
1

전역 변수에서 전달 된 문자열의 첫 번째 항목을 검색하는 함수를 구현하려고합니다. 발견되면, 일치하는 char을 포인터로 반환하기를 원합니다. 문자열 찾기 메서드 구현

그러나 작동하지 않습니다

경고 : 반환 캐스트없이 정수의 포인터를 만드는 당신은 &ptr[i]을 반환 할

char *find(const char *s) 
{ 
    int i = 0; 
    const char *ptr = s; 

    while(ptr[i]) 
    { 
     //wordList is a global struct with a string 
     if(ptr[i] == wordList->search[0]) 
     { 
      return ptr[i]; 
     } 
     else i+=1; 
    } 

    return NULL; 
} 
+1

당신은 두 문자열은 [I] == 단어 목록을이'PTR을 수행하여 동일하다고 확인되지 않은 함수의 반환 형식을 변경하는 데 사용합니다 -> search [0]'하지만 각 문자열의 첫 번째 문자 만 – fvdalcin

+0

포인터의 배열을 전달해야 할 필요가 있습니까? – BLUEPIXY

답변

1

ptr[i]

유형 char이다. 반환 유형이 char *이므로 함수에서 char 포인터를 반환해야합니다.

return &ptr[i]; 

Bit Fiddling Code Monkey 그의 주석에서 지적한 바와 같이, 더 나은

const char *find(const char *s) { ... } 
+1

'return (char *) & ptr [i];'@IMX가받는 경고를 제거해야한다. –

+0

@BitFiddlingCodeMonkey; 예. 그러나 그것은 약간의 구덩이와 폭포도 가지고 있습니다. – haccks

+1

함수 헤더를'const char * find (const char * s) '로 변경하는 것이 더 좋을 것이라고 생각합니다. –

3

[ 기본적으로 설정] - 당신의 코드는 발견 된 문자의 값을 포인터로 반환합니다.

또한, 당신은 const char*에 복용하고 char * 반환하는 - 당신은 아마 그 문제를 해결해야한다 - 중 반환 형식 또는 sptr을 변경합니다. 또한, 당신은 ptr이 필요하지 않습니다 - 당신은 s을 직접 참조 해제 할 수 있습니다. 당신이 consts을 고수하고 우리가 까다롭게하는 경우 아, 그리고, 그것은 아마해야 const char* const s

+0

'경고 : 포인터를 타겟 타입으로 'const'한정자를 버린다. [기본값으로 활성화 됨]' – IMX

+1

@IMX 시도 :'return (char *) ptr' –

+0

const를 캐스팅하는 것은 불쾌한 일이며 보통 서명이 잘못되었다는 것을 의미한다. 이 경우처럼). –