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

C++ copying chars from static to dynamic array adds a bunch of random elements

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

你怎么知道 cipherText 是空终止的?简单地定义它不会使它以 null 终止。

如果要正确打印 C 字符串,则需要以 null 结尾。机器必须知道在哪里停止打印。

要解决这个问题,请将 bytes 增大一个(9 而不是 8)以使 space 成为空字符,然后将其附加到末尾:

bytes[8] = '[=10=]';

现在 cout 将只读取数组的前 8 个字符,之后遇到 '[=13=]' 将停止。

您需要更新代码以复制空终止符:

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 实际上包含一个空终止字符串。