[编号] -OF出现在String的末尾?

时间:2012-07-15 00:15:01

标签: c++

我是c ++的新手,并且在星期天凌晨1点在一个回文程序中进行屠宰,因为!我遇到过这个问题:

输入:测试 反转:tset3-F

3-F来自哪里?有时它只是-F或其他数字-F。这是从哪里来的?

这是我的代码:

 #include <iostream>
 #include <string>


 using namespace std;

int main() {

 string eString;

 int length;
 int counter = 0;

 cout << "Enter String: ";
 cin >> eString;

 length = eString.length();


 char reverseChar[length];




  for(int x = eString.length() -1; x > -1; x--) {

     reverseChar[counter] = eString[x];

     counter++;

 }
 cout << "Reverse: " << reverseChar;


  }

非常感谢你的时间。

3 个答案:

答案 0 :(得分:6)

您没有在字符串末尾添加空终止符。它是随机数据恰好在内存中。

reverseChar的长度应为+ 1

最终字符应设置为'\ 0'

reverseChar [length] ='\ 0';

请参阅:http://en.wikipedia.org/wiki/Null-terminated_string

答案 1 :(得分:3)

您需要在reverseChar字符串中添加空终止符。在C中所有字符串的最后一个字符之后有一个0,它告诉字符串操作函数,其中字符串在内存中结束。 0永远不会包含在长度中,因此在为字符串分配空间时必须记住为它添加空间。

char reverseChar[length + 1]; 

for(int x = eString.length() -1; x > -1; x--) { 

     reverseChar[counter] = eString[x]; 
     counter++; 

} 

reverseChar[length] = 0;

答案 2 :(得分:2)

我认为:char reverseChar [length + 1]因为你需要在字符串分隔符的末尾留下空格reverseChar [length] ='\ 0'