我有以下代码,其中包含字节的vector<int>
转换为char[]
。然后输出char[]
。
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 = �
我怀疑这与尺码有关,但我不确定。
代码出了什么问题?
答案 0 :(得分:5)
您使用sizeof()
的方式不正确。它返回指针的大小,而不是指向的东西的大小。当你指向一个项目数组时,没有办法只使用它的指针来访问指向的东西的大小。
您必须记住在某处使用new
分配的大小并使用它。
答案 1 :(得分:0)
for(int i = 0; i < sizeof(result); i++) // PROBLEM!
{
cout << i << " = " << result[i] << endl;
}
result
是一个指针,看起来你在32位系统上,所以sizeof(result)
是4(字节)。所以你的循环从[0,4]迭代。您需要传递大小,或使用向量的大小:
for(int i = 0; i < data.size(); i++)
{
cout << i << " = " << result[i] << endl;
}