2016-06-24 2 views
0

변수는 다음과 같이 선언 된 경우 :경고 : 호환되지 않는 포인터 유형에서 'XYZ'의 x를 인수 전달은

char ** argv; 

그리고 함수의 정의는 같은 것입니다 : 우리가 통과하는 경우 이제

extern int my_system(const char *argv[]); 

을 함수의 인수는 다음과 같습니다.

(my_system(argv)) 

경고 전달 인수 1을 inc에서 가져옵니다. ompatible 포인터 유형.

가능한 해결책은 무엇입니까?

+1

에서 [, 최소 완료하고 검증 가능한 예]를 작성하십시오 (http://stackoverflow.com/ : 귀하의 경우

, 당신은 침묵에 경고를 포인터를 캐스팅 수, 복잡한 이해를 얻었다 help/mcve) 당신이 시도한 것을 보여줍니다. –

답변

0

C에서는 모든 경우에 최종 요소의 수정을 막지 않으므로 T**에서 const T** 사이의 암시 적 변환이 없습니다. 향상된 설명과 "백도어"수정의 예는 C FAQ의 질문 11.10을 참조하십시오.

extern int my_system(const char *argv[]); 

int main(int argc, char* argv[]) 
{ 
    my_system((const char**)argv); 
} 
+0

'const' 인수가 아닌'const' 인수로 전달되는 반대 상황에서만 경고가 발생합니까? 'strcpy' 등이'const'가 아닌 인수를 넘겨주는 문제는 결코 없습니다. –

+0

@Weather Vane : 질문에 지정된 경고는'char ** -> const char **'에 관한 것입니다. 호환되지 않는 포인터 때문에 반대 상황 (매개 변수'char **'을 예상하는 함수에'const char **'전달)은 허용되지 않지만 또 다른 이야기입니다. –

+1

두 가지 수준의 간접 지정 ('char **')이 있으면 양쪽 방향 모두에서 경고를 받게됩니다. 비 const로 const를 지정하면, 단일 인다이 렉션 ('char *') 만있는 경고를 받게됩니다. 그러므로 non-const를'strcpy()'외에도 전달한다. 경고를 내지 않을 것입니다. –

관련 문제