2013-11-22 2 views
1

바이트를 포함하는 vector<int>char[]으로 변환되는 아래 코드가 있습니다. 이 char[]이 출력됩니다.C++ 변환 바이트

vector<int> data; 
data.push_back(33); 
data.push_back(69); 
data.push_back(80); 
data.push_back(0); 
data.push_back(0); 
data.push_back(74); 
data.push_back(255); 

char* result = new char[data.size()]; 

for(int i = 0; i < data.size(); i++) { 
    result[i] = (char)data[i]; 
    cout << i << " = " << (char)data[i] << endl; 
} 

cout << "--" << endl; 

for(int i = 0; i < sizeof(result); i++) { 
    cout << i << " = " << result[i] << endl; 
} 

이 코드는 다음과 같은 결과를 산출합니다.

0 = ! 
1 = E 
2 = P 
3 = 
4 = 
5 = J 
6 = � 
-- 
0 = ! 
1 = E 
2 = P 
3 = 

그러나, 나는이 크기 함께 할 수있는 뭔가가 생각,하지만 확실하지 오전

0 = ! 
1 = E 
2 = P 
3 = 
4 = 
5 = J 
6 = � 
-- 
0 = ! 
1 = E 
2 = P 
3 = 
4 = 
5 = J 
6 = � 

수를 예상했다.

코드에 어떤 문제가 있습니까?

+1

'sizeof (result)'는 포인터 크기이기 때문에 sizeof (result)는 4 (또는 x64는 8)가됩니다. –

답변

5

sizeof()을 사용하는 방식이 잘못되었습니다. 가리키는 포인터의 크기가 아니라 포인터의 크기를 반환합니다. 아이템의 배열을 가리키고있을 때 포인터 만 주어진 지적 된 것의 크기에 접근 할 방법이 없습니다.

어딘가에 new으로 할당 한 크기를 기억하고 사용해야합니다. 그래서 sizeof(result) 4 (바이트),

+0

감사! 받아 들일 것입니다. – screenmutt

0
for(int i = 0; i < sizeof(result); i++) // PROBLEM! 
{ 
    cout << i << " = " << result[i] << endl; 
} 

result 포인터이며 32 비트 시스템에있는 나타납니다. 따라서 루프는 [0, 4]에서 반복됩니다. 크기를 전달하거나 벡터의 크기를 사용해야합니다.

for(int i = 0; i < data.size(); i++) 
{ 
    cout << i << " = " << result[i] << endl; 
}