C ++从静态数组复制字符到动态数组会添加一堆随机元素

时间:2015-04-17 04:59:11

标签: c++ arrays dynamic-arrays

我有一个静态数组,但是当将值复制到动态数组时,我会得到一堆无意义的填充。我需要生成的动态数组正好是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~█ó¡²²²²½½½½½½½½ε■ε■

3 个答案:

答案 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是空终止的?简单地定义它不会使它无效终止。