2010-11-29 5 views
0
aCCB->C16_ArgInfo(aCCB->InstHdl,2,&tType2,&tOpt2,&tLen2,NULL,&tCount2); 

if (tType2 == _TypeAlpha && 
    tOpt2 == (_ArgOptVAR | _ArgOptARRAY)) 
{ 
    /* read array */ 
    tBuf = static_cast<char*>(malloc(tLen2)); 
    aCCB->C16_ArgRead(aCCB->InstHdl,2,0,tBuf); 

    tTab = static_cast<char**>(malloc(sizeof(char*) * tCount2)); 
    tSize = tLen2/tCount2; 
    *tTab = tBuf; 

    /* define sort table */ 
    for (tLoop = 1; tLoop < tCount2; ++tLoop) 
     tTab[tLoop] = tTab[tLoop-1] + tSize; 

내가 알기로는 aCCB-> InstHdl에 문자열 배열 (char **)로 변환되는 원시 데이터가 포함되어 있습니다.아무도이 코드를 설명 할 수 있습니까?

내가 이해할 수없는 것은 마지막 루프입니다. 그것은 무엇을합니까? 그것은 무엇을위한 것인가? C++ 지식이 전혀 존재하지 않는다는 것을 인정해야합니다 ...

+1

'C16 _...'함수가 무엇을하는지 모른 채 실제로 말하기는 어렵습니다. – casablanca

+0

이것은 매우 구체적인 질문입니다. 그래서 'tTab'에 많은 가치가 있다고 생각할 수는 있지만, 그 숫자가 실제로 의미하는 바를 말할 수는 없습니다. 'tTab [tLoop] = tTab [tLoop-1] + tSize;'tTab'는'malloc' 할당을했기 때문에'tTab [0]'에 접근하면 예기치 않은 결과가 나올 수 있습니다. 메모리가 초기화되지 않았으므로 정의되지 않은 동작입니다. – birryree

+5

Urgh. 고양이가 다시 키보드에있는 것처럼 보입니다. 그리고 그것은'malloc()'을 사용하기 때문에 C 고양이이기도합니다. 왜냐하면'static_cast <> '도 사용하고 있기 때문입니다. 그리고 그 코드가 추악하다는 것을 언급 했습니까? – sbi

답변

4

이전 반복의 값에 tSize를 더하여 배열을 반복합니다. 그게 무슨 의미인지 ... 왜 내가 어떻게 알아야하지?

나는 그 코드를 이해할 수 없다는 이유로 너무 힘들지 않을 것이다. 읽을 시간이 매우 어렵습니다.

편집 :

오. OP에게 코멘트 중 하나를 읽고 더 보았습니다. 이 코드는 끔찍하다!

다음과 같은 현상이 발생합니다. 배열이 tBuf로 읽혀집니다. 배열 배열은 tCount2 배열을 유지하기 위해 생성됩니다. tSize가 tLen2/tCount2로 초기화됩니다. 기본적으로 tCount2 항목이 생성됩니다.

그러면 tBuf 포인터가 tTab '배열 배열'의 첫 번째 요소에 할당됩니다.

이제 for 루프 .... for 루프는 기본적으로 시리즈의 첫 번째 요소를 분할하고 각 tLen2/tCount2 세그먼트의 주 tBuf에 포인트를 제공합니다. 당신이 얻을 무엇

...

[0] [1] [2] [3] [4] 
| | | | | 
v v v v v 
|datadatadatadatadata| 

우!

아니요. 정의되지 않은 동작이나 지정되지 않은 동작이 발생하지 않습니다. 그냥 못 생겼어.

+0

지금은 알겠습니다. 어리석은 포인터 조작 .. 'aCCB-> InstHdl'데이터를 배열 으로 분할하는 방법을 보여줄 수 있습니까? (Managed C++) – VVS

+0

나는 managed C++을하지 않는다. 'std :: string (tab [0], tab [1])'을 사용하여 섹션을 문자열로 분할 할 수 있습니다. –

0

루프 모양은 tBuf의 연속적인 부분 문자열에 대해 tTab으로 설정되며, 길이는 각각 이전 길이 인 tSize보다 짧습니다. 하위 문자열을 분할하지 않고 인덱스 만 tBuf에 설정합니다.

그러나 C16_* 함수 중 어떤 것이 수행되는지 알지 못해도 나머지는 추측 할 수 없습니다.

관련 문제