2017-01-13 4 views
-1

독립 실행 형 함수를 사용하여 배열에 할당 된 바이트 수를 얻으려고했지만 실패했습니다. 다음과 같이 내 코드는 다음과 같습니다배열을 함수 포인터로 전달하고 sizeof() 연산자 사용

#include <stdio.h> 

void testing(char *source); 

int main(){ 

    char a[12] = "Hello World!"; 
    //printf("%d",sizeof(a)); Prints 12. I want to get this value 
    testing(a); // Prints 4. I need to get 12 by using functions 


return 0; 
} 

void testing(char *source){ 
    printf("%d",sizeof(source)); 
} 

내가 12대로 결과 싶어하지만 출력은 4

+0

포인터를 사용하여'sizeof'에서 배열 크기를 가져올 수 없습니다. –

+0

"나는 2 + 2가 5가 되길 바래."라고 말하는 것과 같습니다. 당신은 그것을 "간절히 원할"수는 있지만 일어날 수는 없습니다. 'sizeof'는 이것을하지 않습니다. – AnT

+0

함수를'void testing (char (* source) [12])'로 변경하고 함수에서'sizeof * source'를 사용합니다. –

답변

0

내가 12으로 결과를 얻고 싶은 것을 알려줍니다하지만 출력은 나에게 말한다 그것은 4입니다.

배열 포인터가 함수 포인터로 전달되면 그 배열의 크기를 가져올 수 없습니다.

void testing(char *source)에서 source은 포인터이므로 sizeof(pointer)은 4 (사용자 컴퓨터에서 4 바이트)를 제공합니다.

배열 매개 변수가 어쨌든 포인터로 쇠퇴하므로 함수 내부의 배열 크기를 알아낼 방법이 없습니다.

+0

감사합니다! 이 일을하는 또 다른 방법이 있습니까? – Abdulla

+0

명시 적으로 크기를 한 방향으로 전달하거나 다른 것으로 명시 적으로 전달하지 않습니다. – luk32

관련 문제