2013-08-22 1 views

답변

1

함수에 국한된 변수가 아닌 한 당신은 할 수 없습니다. 배열이 전달되는 방식으로 인해 포인터로 저하되고 모든 크기 정보가 손실됩니다 (컴파일러가 더 이상 가정을 할 수 없기 때문에 배열이 만들어진 곳의 컨텍스트 외부에서 손실됩니다).

명시 적으로 크기를 전달하거나 항상 동일한 크기를 전달해야합니다.

stringArray이 전역으로 선언되었거나 선언 한 곳의 내부에 선언 된 경우 게시 한 내용이 작동합니다.

+0

내 마음은 내 희망을 익사시키기 위해 +1을주고 싶지 않습니다 ... – kBisla

+0

@BlueFlame 길이가 지나치게 복잡하면 지원할 수있는 언어를 사용할 수 있습니다. 또는 자신의 배열 구조체에 포장하십시오 –

+0

sting 배열을 생성하는 fn에 정수 포인터로 길이를 전달했습니다 ... – kBisla

1

stringArray가 선언 된 방법에 따라 다릅니다. 작동

int main() 
{ 
    char stringArray[500]; 
    int noOfStrings = sizeof(stringArray)/sizeof(stringArray[0]); 
    ... 
} 

하지만하지에서 :

제 경우
int function(char *stringArray) 
{ 
    int noOfStrings = sizeof(stringArray)/sizeof(stringArray[0]); 
    ... 
} 

은은 StringArray가 char 형 [500]의 상수이고, sizeof의 바이트의 수를 제공 배열에 할당됩니다.

두 번째 경우에서 stringArray는 char에 대한 포인터이고 sizeof는 포인터의 크기를 나타냅니다.

그들은 완전히 다른 두 가지이며, 비슷하게 보입니다.

+0

+1 두 개의 시나리오를 비교하는 경우 하나는 sizeof 계산 작동 및 다른 작동하지 않습니다. 다음의 차이점을 이해하는 것이 중요합니다. (1) 함수 매개 변수로 선언 된 배열 (변모의 포인터). (2) 지역 변수 인 배열. (3) 현재 파일에 정의 된 파일 범위 변수; (4) 다른 파일에 정의되고 불완전한 유형으로 선언 된 외부 변수. –

1

코드를 게시하십시오. 런타임시 값을 계산하려는 특정 솔루션은 언뜻보기에는 불가능합니다.

그러나, 당신은/코드 수로 매크로를 정의 할 수 있습니다 :은 StringArray가 문자 포인터의 배열 인 경우

#define strsize sizeof(stringArray)/sizeof(char *) 

하지만, 소스를 보지 않고는 특정 솔루션을 권장하기는 어렵다.

때로는 직접 해결할 수없는 해결책도 있지만 다른 방법으로 해결할 수 있습니다 !!

관련 문제