2013-06-27 3 views
0

거래 도구 (MultiCharts) 용 유틸리티 DLL을 개발 중입니다. 도구를 사용하려면 라이브러리를 C++로 빌드해야합니다. 내 문제는 형식의 다차원 배열을 반환 할 수있는 메서드를 작성해야합니다 : char*. 문자열이 아닌 char*을 사용하는 이유는 도구가 문자열 데이터 유형과 호환되지 않기 때문입니다. 따라서 char* (호환 됨)을 사용해야합니다.다차원 char * 배열 반환

나는 조금 연구를했으며 일부 코드 단편을 발견했지만 아무 것도 나를 위해 일하는 것 같지 않습니다.

char ***signals = new char**[1024]; 

for (int i=0; i<data.size(); i++) 
{ 
    signals[i] = new char*[8]; 

    for (int j=0; j<8; j++) 
    { 
     string instance; 
     char* result; 

     instance = data[i][j]; 

     result = new char[instance.size() + 1]; 
     result[instance.size()] = 0; 
     memcpy(result, instance.c_str(), instance.size()); 

     signals[i][j] = result; 
    } 
} 

위의 스 니펫은 제대로 작동하지 않으며 가비지 값만 저장됩니다. 콘솔 응용 프로그램으로 실행했습니다. 전체 행 = 1024 8 열 (시스템의 요구)를 생성 할 수

Image

데이터 구조 : 여기 디버깅 정보의 스크린 샷이다. 데이터은 도구로 전송해야하는 값을 가진 벡터입니다.

누구나 아이디어를 얻을 수 있습니까?

+3

C++에서'char ***'을 반환하지 마십시오. 'vector >'을 반환하십시오. –

+0

릴리스 모드에서 저장된 char 값은 어디에서 디버깅 했습니까? –

+0

@ H2CO3 귀하의 의견에 감사드립니다. 앞서 언급했듯이 문자열 데이터 유형을 반환하지 못하도록하는이 제약이 있습니다. 그래서 char * 사용할 필요가있다. –

답변

0

이 코드는 정확합니다. 그리고 당신의 그림은 쓰레기를 암시하는 것이 아니라 건강한 문자열을 보여줍니다.

문제는 아마도 다른 곳에서 발생했을 것입니다.

다른 부분 : C 스타일 배열을 함수에서 반환 할 수 없습니다. 하지만 문자 *을 반환 할 수 있습니다.