我有一个静态数组,但是当将值复制到动态数组时,我会得到一堆无意义的填充。我需要生成的动态数组正好是8个字符
unsigned char cipherText[9]; //Null terminated
cout<<cipherText<<endl; //outputs = F,ÿi~█ó¡
unsigned char* bytes = new unsigned char[8]; //new dynamic array
//Loop copys each element from static to dynamic array.
for(int x = 0; x < 8; x++)
{
bytes[x] = cipherText[x];
}
cout<<bytes; //output: F,ÿi~█ó¡²²²²½½½½½½½½ε■ε■
答案 0 :(得分:1)
如果要正确打印C字符串,则需要以空值终止。机器必须知道停止打印的位置。
要解决此问题,请使bytes
更大(9而不是8)为空字符腾出空间,然后将其追加到最后:
bytes[8] = '\0';
现在cout
现在只读取数组中的前8个字符,之后遇到'\0'
并将停止。
答案 1 :(得分:1)
您需要更新代码以复制空终止符:
unsigned char* bytes = new unsigned char[9]; //new dynamic array
//Loop copys each element from static to dynamic array.
for(int x = 0; x < 9; x++)
{
bytes[x] = cipherText[x];
}
cout<<bytes;
这假设cipherText
确实包含空终止字符串。
答案 2 :(得分:0)
你怎么知道cipherText是空终止的?简单地定义它不会使它无效终止。