2012-07-15 64 views
2

我是一個新來的C++,並且在週日凌晨1點在回教節目中一起屠殺,因爲!我也碰到過這樣的問題:[數字] -F出現在字符串的末尾?

輸入:測試 反向: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; 


    } 

非常感謝您的時間。

+2

順便說一句,你可以使用'std :: reverse'來達到這個目的。甚至不需要C字符串。 – chris 2012-07-15 00:18:44

+0

謝謝,現在就看着它。我的加速C++書籍還沒有到達,所以我有點猶豫,直到那時纔得到一些練習!謝謝你的幫助。 – speak 2012-07-15 00:21:13

+1

* Aside *:'char reverseChar [length];'是無效的C++。一些編譯器接受可變長度數組作爲語言擴展,但C++要求所有數組的長度不變。 – 2012-07-15 01:01:11

回答

6

您不在字符串的末尾添加空終止符。這是發生在記憶中的隨機數據。

reverseChar應長度+ 1在尺寸

最終炭應設置爲 '\ 0'

reverseChar [長度] = '\ 0';

參見:http://en.wikipedia.org/wiki/Null-terminated_string

+0

對不起,我還沒有深入內存管理,我該如何添加一個空終止符? – speak 2012-07-15 00:18:09

+0

感謝您的回覆和鏈接,現在閱讀它。出於好奇,我看到很多涉及字符的代碼,現在我遇到了這個問題,很明顯爲什麼字符串在C++中不受歡迎,你能簡單介紹一下如何使用char的方式來實現這一點嗎? – speak 2012-07-15 00:23:33

+1

@speakon它是在C++中不受歡迎的char數組,如果僅使用'std :: string's,則事情會變得更加容易。 – aschepler 2012-07-15 00:35:19

2

我想的:char reverseChar [長度+ 1],因爲你需要留出空間字符串的結束符reverseChar [長度] = '\ 0'

+0

謝謝,非常感謝。 – speak 2012-07-15 00:20:30

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; 
+0

非常感謝您的回答。 – speak 2012-07-15 00:20:23