这是代码:
int main(){
string word= "word";
char ciphered[word.length()];
for(int i=0; i<word.length(); i++)
{
int current_position = (int) word[i];
int new_position = current_position + 2;
char this_char = (char) new_position;
ciphered[i] = this_char;
}
string str(ciphered);
cout << str << endl ;
}
但是当我这样做时:
for(int i = 0; i<sizeof(ciphered); i++)
{
cout << ciphered[i] << endl ;
}
它打印出相同的东西,但没有最后三个标志,这是正确的 但每当我尝试将此char数组转换为字符串时,它会添加最后三个奇怪的符号,我不知道为什么
答案 0 :(得分:3)
首先,这个:
char ciphered[word.length()];
不是合法的C ++代码,但gcc可能会接受它。但其次,您不需要真正的char数组,因为您可以使用std::string
本身访问单个符号:
string word= "word";
string ciphered( word.length(), ' ' );
for(int i=0; i<word.length(); i++)
{
ciphered[i] = word[i] + 2;
}
cout << ciphered << endl;
你的代码打印了额外的符号,因为你没有在C风格的字符串上放置null终止符并通过std::ostream
发送它导致UB并在char数组之后打印内存中发生的垃圾,直到它突然发现null终结符或因访问无效内存而崩溃。