2016-07-13 3 views
0

는이 코드 조각은 오류 error: invalid operands to binary -주고있다 : 오류 : - 바이너리에 유효하지 않은 피연산자

if(memcmp(params , DEV_SERVICE_DISCOVERY , strlen(DEV_SERVICE_DISCOVERY)) == 0) 
{ 
    UINT8 *yes_no; 

    params = XSH_UtilFindNextToken(params); 
    yes_no = XSH_UtilFindNextToken(params); 

    params[yes_no - params - 1] = '\0'; 

    rc = AppTest_ServiceDiscovery(params, yes_no , strlen(yes_no), pOut); 
} 

내가 char *yes_noUINT8 *yes_no을 변경하고 그것을 해결되었다. 그러나 왜 오류가오고 왜 해결되었는지 알지 못했습니다. 문제를 설명해주십시오.

미리 감사드립니다.

+1

중복되지 않음 : 포인터를 추가하는 것은 의미가 없지만 포인터를 같은 배열에 속하면 오프셋을 계산하는 데 유용합니다. –

+2

'params'유형은 무엇입니까? 나는 그것이'char * '라고 추측한다. 그렇다면 그것을 설명합니다. 포인터 빼기를 사용하려면 포인터가 동일한 유형이어야합니다. – kaylum

+0

예 param은 char *입니다. – Abhinav

답변

3

두 개의 포인터를 뺄 때, 이들은 같은 유형이어야합니다. 이것은 C의 포인터 연산이 pointees의 크기를 기반으로하기 때문에 예를 들어 char*int*에서 뺀 경우 1 바이트 개체와 4 바이트 개체가 있으므로 컴파일러에서 알 수있는 방법이 없습니다 결과가 1 바이트 단위이든 4 바이트 단위이든 상관 없습니다.

두 개의 pointee가 모두 단일 바이트이지만 표준 C에서는 여전히 허용되지 않습니다 (다른 유형의 객체가 같은 영역에 저장된다는 가정이없는 등).

관련 문제