C++ 将字符数组转换为字符串时出现奇怪的异常

C++ 将字符数组转换为字符串时出现奇怪的异常,c++,arrays,string,char,type-conversion,C++,Arrays,String,Char,Type Conversion,我正在尝试构建一个程序,该程序利用替换表和密钥生成密码/加密文本。到目前为止,我已经成功地将加密文本存储在一个字符数组中。如果我使用for循环遍历文本,它每次都能完美地工作。但是,我需要以字符串形式返回加密文本。这是我正在使用的方法 string ciphertext = cipherArray; //cipherArray is of type char 当我试图破解密文时,它有时会正常输出,有时会显示一些正确的字母,然后是奇怪的符号。当我使用for循环打印数组时,它工作得很好,但将其转换为

我正在尝试构建一个程序,该程序利用替换表和密钥生成密码/加密文本。到目前为止,我已经成功地将加密文本存储在一个字符数组中。如果我使用for循环遍历文本,它每次都能完美地工作。但是,我需要以字符串形式返回加密文本。这是我正在使用的方法

string ciphertext = cipherArray; //cipherArray is of type char
当我试图破解密文时,它有时会正常输出,有时会显示一些正确的字母,然后是奇怪的符号。当我使用for循环打印数组时,它工作得很好,但将其转换为字符串会给我带来问题。当它从char转换为string时,它似乎正在存储超出范围的项

下面是完整的程序:(问题在加密方法定义下)

#包括
#包括
使用名称空间std;
//=============================================================================
//-密码类-
//
类密码{
公众:
密码();
密码(字符串密钥);
密码(字符串密钥、字符串消息);
void newKey();
字符串inputMessage();
字符串加密(字符串消息);
字符串解密(字符串消息);
字符串getPlainText()常量;
字符串getCipherText()常量;
私人:
空字母表();
void initTable();
字符字母表[26];
字符表[26][26];
字符串键;
字符串明文;
字符串密文;
};
//=============================================================================
//-主要-
//
int main(){
密码myCipher;
不能明文;
返回纯文本;
}
//=============================================================================
//-新钥匙-
//
void Cipher::newKey(){
cin>>键;
}
//=============================================================================
//-加密-
//
字符串密码::加密(字符串消息){
int iTableRow,iTableCol,i;
未签名的整数iKey,iMsg;
int-keyValStorage[key.length()];
int msgValStorage[message.length()];
字符密码数组[message.length()];
对于(iKey=0;iKey(key.length()-1))
iKey=0;
cipherray[iMsg]=表[keyValStorage[iKey]][msgValStorage[iMsg]];
}         
对于(iKey=0;iKeycout
std:string
具有接受
char
缓冲区和字符串长度的。只需使用:

string ciphertext = string(cipherArray, /*length_of_cipherArray_here*/);
甚至更短:

string ciphertext(cipherArray, /*length_of_cipherArray_here*/);

当然,这假设Cipherray是一个
char[]
char*

您希望构造函数如何知道要复制多少字节?(您的
for
循环如何知道?发布一些代码。)好的,当我使用for循环打印Cipherray时,我使用了原始消息的长度(要加密)作为限制。在将字符数组转换为字符串类型时,如何指定此项?Cipherary的大小始终与要加密的原始消息的长度相同。您必须像Arnold一样终止字符串…或提供开始和结束迭代器。这取决于您如何构造
std::string@Victor使用一个带范围或序列的构造函数。它不能靠魔法工作。(如果你给我们看一些代码,我可以给你看实际的代码。)这就是我要找的!谢谢你的元立方体!
string ciphertext(cipherArray, /*length_of_cipherArray_here*/);