비슷한 질문이 this에 왔습니다. 하지만 장점은 각 문자열이 260 자 길이라는 것을 알고 있다는 것입니다.번호를 어떻게 계산합니까? 문자열 배열의 문자열?
희망 하시겠습니까?
int noOfStrings = sizeof(stringArray)/sizeof(stringArray[0]);
이것은 작동하지 않습니다.
비슷한 질문이 this에 왔습니다. 하지만 장점은 각 문자열이 260 자 길이라는 것을 알고 있다는 것입니다.번호를 어떻게 계산합니까? 문자열 배열의 문자열?
희망 하시겠습니까?
int noOfStrings = sizeof(stringArray)/sizeof(stringArray[0]);
이것은 작동하지 않습니다.
함수에 국한된 변수가 아닌 한 당신은 할 수 없습니다. 배열이 전달되는 방식으로 인해 포인터로 저하되고 모든 크기 정보가 손실됩니다 (컴파일러가 더 이상 가정을 할 수 없기 때문에 배열이 만들어진 곳의 컨텍스트 외부에서 손실됩니다).
명시 적으로 크기를 전달하거나 항상 동일한 크기를 전달해야합니다.
stringArray
이 전역으로 선언되었거나 선언 한 곳의 내부에 선언 된 경우 게시 한 내용이 작동합니다.
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는 포인터의 크기를 나타냅니다.
그들은 완전히 다른 두 가지이며, 비슷하게 보입니다.
+1 두 개의 시나리오를 비교하는 경우 하나는 sizeof 계산 작동 및 다른 작동하지 않습니다. 다음의 차이점을 이해하는 것이 중요합니다. (1) 함수 매개 변수로 선언 된 배열 (변모의 포인터). (2) 지역 변수 인 배열. (3) 현재 파일에 정의 된 파일 범위 변수; (4) 다른 파일에 정의되고 불완전한 유형으로 선언 된 외부 변수. –
코드를 게시하십시오. 런타임시 값을 계산하려는 특정 솔루션은 언뜻보기에는 불가능합니다.
그러나, 당신은/코드 수로 매크로를 정의 할 수 있습니다 :은 StringArray가 문자 포인터의 배열 인 경우
#define strsize sizeof(stringArray)/sizeof(char *)
하지만, 소스를 보지 않고는 특정 솔루션을 권장하기는 어렵다.
때로는 직접 해결할 수없는 해결책도 있지만 다른 방법으로 해결할 수 있습니다 !!
내 마음은 내 희망을 익사시키기 위해 +1을주고 싶지 않습니다 ... – kBisla
@BlueFlame 길이가 지나치게 복잡하면 지원할 수있는 언어를 사용할 수 있습니다. 또는 자신의 배열 구조체에 포장하십시오 –
sting 배열을 생성하는 fn에 정수 포인터로 길이를 전달했습니다 ... – kBisla