2013-07-30 4 views
-1

소켓 프로그래밍 응용 프로그램을 작성 중입니다. C++과 Java를 두 가지 목적으로 사용합니다. 내 시스템 은 Java이고 내 시스템을 사용하는 응용 프로그램은 C++을 사용합니다.변수에 대한 포인터와 한 요소의 배열에 대한 포인터

일부 데이터를 보유하는 C++에서 포인터를받습니다.이 포인터는 변수 또는 배열 일 수 있습니다. 포인터에 포함 된 요소 수를 나타내는 다른 변수 nrOfData가 있습니다. String 또는 String [] 유형의 Object를 적절히 채워야합니다. 하지만 내 문제가 nrOfData == 1이 다음 가변적이고 또는 배열 (배열을 포함하는 하나 개의 요소) 여기 샘플 프로그램을 제공하고 모두있는 posibility가되어

#include<iostream> 
using namespace std; 


void func(string **strPtr) 
{ 
    if(someCondition) 
    { 
    *strPtr = new string; 
    } 
    else 
    { 
    *strPtr = new string[1]; 
    } 
} 

int main() 
{ 
    string *strPtr; 
    func(&strPtr); 
    /* I have to fill a variable and send to next level 
    strPtr contains one element in both cases. How could i determine whether 
    I need to fill String or String[]*/ 
} 
(더 유사 하나를 얻기 위해 노력했다)

나는 엄격해야한다. 도움 주셔서 감사합니다.

+5

먼저 'new'를 사용하지 않습니다. 그런 다음 배열과 비 배열을 혼합해야한다는 요구 사항을 삭제할 수 없습니까? 그것은 당신이 필요로 할 것보다 훨씬 더 많은 문제를 일으 킵니다. –

+3

아마도'std :: vector's를 사용하고 주위 사람들에게 참조를 건네 주시겠습니까? 벡터는 0 개 이상의 요소를 포함 할 수 있으며 요소의 수를 얻으려면'std :: vector :: size' 만 사용할 수 있습니다. – m01

+0

답변 해 주셔서 감사합니다. 아니요. 요구 사항을 삭제할 수 없습니다. 그리고 위의 프로그램은 내가 사용하고있는 프로그램이 아닙니다. 비슷한 프로그램을 작성했습니다. 내가 new 또는 malloc을 사용했는지 무시하십시오. – Srikanth

답변

-2

변수에 대한 포인터 또는 포인터를 결정하는 데 유용한 "sizeof()"연산자를 사용할 수 있습니다. 우리가 "sizeof()"에 배열 이름을 건네면 배열의 총 크기가 바이트 단위로 주어지며 일반 포인터를 전달할 때 주소 길이가 주어진다.

+0

'sizeof (pointer)'는 꽤 무의미하며,'sizeof'는 구현 정의되어 있습니다. 당신은'sizeof (T [1])! = sizeof (T [2])'가 아니라'sizeof (T [1])! = sizeof (T)' – nijansen