2

私は C++ の初心者で、日曜日の午前 1 時に回文プログラムを一緒に解体していました。そして、私はこの問題に遭遇しました:

入力: test 逆: 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;


  }

お時間をいただきありがとうございました。

4

3 に答える 3

6

文字列の末尾に null ターミネータを追加していません。たまたまメモリ内にあるのはランダムなデータです。

reverseChar は長さ + 1 のサイズである必要があります

最後の文字は '\0' に設定する必要があります

reverseChar[長さ] = '\0';

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

于 2012-07-15T00:17:06.170 に答える
3

文字列に null ターミネータを追加する必要がありreverseCharます。C では、すべての文字列の最後の文字の直後に 0 があり、文字列操作関数に文字列がメモリ内でどこで終わるかを伝えます。0 は長さに含まれないため、文字列にスペースを割り当てるときは、0 のためのスペースを追加することを忘れないでください。

char reverseChar[length + 1]; 

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

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

} 

reverseChar[length] = 0;
于 2012-07-15T00:19:47.953 に答える
2

私は思う: char reverseChar[length+1] 文字列区切り文字の末尾にスペースを残す必要があるため、 reverseChar[length]='\0'

于 2012-07-15T00:19:47.353 に答える