私は非常に単純な暗号化プログラムを書いてC++を実践しました。私はこの奇妙な振る舞いを見つけました。文字列を配列と同じに設定することでchar *配列を文字列に変換すると、間違った文字列が返されますが、空の文字列を作成して文字列を個別に追加すると、正しい文字列が作成されます。誰かがなぜこれが起こっているのか説明してもらえますか、私は先週C++でプログラミングを始めました。なぜこれが動作しないのか分かりません。なぜ2つの異なる文字列が得られますか?
はところで私は、オンラインでチェックし、これらは明らかに文字列に文字列を変換するの両方の有効な方法です。
void expandPassword(string* pass)
{
int pHash = hashCode(pass);
int pLen = pass->size();
char* expPass = new char[264];
for (int i = 0; i < 264; i++)
{
expPass[i] = (*pass)[i % pLen] * (char) rand();
}
string str;
for (int i = 0; i < 264; i++)
{
str += expPass[i];// This creates the string version correctly
}
string str2 = expPass;// This creates much shorter string
cout <<str<<"\n--------------\n"<<str2<<"\n---------------\n";
delete[] expPass;
}
編集:私は、配列からの零点のすべてを削除し、それは何も変更していない
あなたのエンコードされた文字列は、ゼロが含まれています。 –
「間違った文字列」はどういう意味ですか?結果の文字列が最初の文字列の最初の '\ 0'文字で終わることを除いて、結果の文字列は最初の文字列と同じであることを意味しますか? –