2014-09-10 2 views
4

이 질문은 이미 여러 번 답변되었지만 상황을 해결하는 데 어려움을 겪고 있습니다.문자열 포인터, 호환되지 않는 포인터 유형

#include <stdio.h> 
#include <stdlib.h> 

inputData(int size, char *storage[size]) 
{ 
    int iterator = -1; 

    do { 
     iterator++; 
     *storage[iterator] = getchar(); 
    } while (*storage[iterator] != '\n' && iterator < size); 
} 

main() 
{ 
    char name[30]; 

    inputData(30, name); 
} 

경고 메시지 :

$ gcc가 text.c text.c : 기능에서 '주' text.c 내 경고 창출 코드가 포함되어 내 프로그램의 조각을했다 : 18 : 5 : 경고 : 호환되지 않는 포인터 유형의 'inputData'인수 2 전달 [기본적으로 사용 가능] inputData (30, name);^text.c : 4 : 1 : 참고 : 예상 '숯 **'그러나 인수 형인 '* CHAR'inputData (INT 크기 * CHAR 저장 [크기])

EDIT :

좋아, 그래서 나는 약간의 문법으로 놀고 그 문제를 해결했다. 나는 아직도 내가 필요했던 것보다 더 지식이 풍부한 사람으로부터 듣는 것을 꺼린다. 다음은 내가 변경 한 내용입니다.

#include <stdio.h> 
#include <stdlib.h> 

inputData(int size, char *storage) // changed to point to the string itself 
{ 
    int iterator = -1; 

    do { 
     iterator++; 
     storage[iterator] = getchar(); // changed from pointer to string 
    } while (storage[iterator] != '\n'); // same as above 
} 

main() 
{ 
    char name[30]; 

    inputData(30, name); 

    printf("%s", name); // added for verification 
} 
+0

내부'inputData은()', 코드를 중지하는 3 가지 이유가 있어야합니다 : 1)'getchar가()를 '반환' '\ n'' 2)'getchar가 - :
당신은 유용한 다음과 같은 링크를 찾을 수 있습니다()'EOF'를 반환했습니다. 3) 더 이상 공간이 없습니다. – chux

답변

1

배열 이름은 함수로 전달 될 때 첫 번째 요소를 가리키는 포인터로 변환됩니다. name은 배열 name의 첫 번째 요소 주소 인 &name[0] (char 유형의 포인터)로 변환됩니다. 따라서 함수의 두 번째 매개 변수는 char 유형에 대한 포인터 여야합니다.

char *storage[size]은 함수 매개 변수로 선언 할 경우 char **storage과 같습니다. 따라서 char *storage[size]char *storage으로 변경하십시오. 당신이 함수에 배열을 전달하는 경우

0

, 당신은 2 가지 방법으로 그것을 할 수 있습니다 :
는 다음 사항을 고려 프로그램 : -

int main() 
{ 
    int array[10]; 
    function_call(array); // an array is always passed by reference, i.e. a pointer 
    //code    // to base address of the array is passed. 
    return 0; 
} 

방법 1 :

void function_call(int array[]) 
{ 
    //code 
} 

방법 2 :

void function_call(int *array) 
{ 
    //code 
} 

두 가지 방법의 유일한 차이점은 구문입니다. ise는 모두 동일합니다.
C 언어에서 배열은 값으로 전달되지 않고
참조로 언급 할 가치가 있습니다.

http://stackoverflow.com/questions/4774456/pass-an-array-to-a-function-by-value 
관련 문제