2017-10-26 44 views
0

argv[]の文字列要素をコンソールに印刷しようとしていますが、何らかの理由で出力が得意です。私のプログラム(回文をテストする)は正しく動作しているようです。唯一の欠点は、要素int argv[]を私が回文としてテストしたコンソールに出力しようとしたときです。ここで* argv []を使った異常な出力

はこのを扱う私のコードです: enter image description here

+0

は、あなたが共有することができ、エラーまたは予想される、と実際の出力? –

+0

@Saram aliはい、私は自分の投稿を更新しました。私は最初に追加するつもりだったが、忘れてしまった – McFizz

+1

'printf(" s:%s \ n "、s);' - これをしないでください。 'printf'関数は' std :: string'について何も知りません。あなたのコードは未定義の動作を引き起こします。 – PaulMcKenzie

答えて

3

をあなたがcoutを使用することはできませんと言うので、あなたがprintfを使用していない。ここで

for (int i = 1; i < argc; i++) { 
    string s(argv[i]); 
    printf("s: %s\n",s); 
    if (ignoreCase) { 
     for (int j = 0; j < s.size(); j++) { 
      tolower(s.at(j)); 
     } 
    } 
    if (ignoreSpaces) { 
     s = removeSpaces(s); 
    } 
    if (isPalindrome(s, 0, s.size() - 1)) { 
     printf("%s is a palindrome.\n",s); 
    } 
    else { 
     printf("%s is not a palindrome.\n",s); 
    } 
} 

は、私が取得しています出力されます正しくprintfを使用していて、printfは(std::string)の何も知らないので、プログラムは未定義の動作を呼び出しています。

修正は、printfが知っているタイプを使用することです。 std::stringにはc_str()関数があり、const char *を返します。その代わりにその関数を使用してください。このような

ので、代わりの行:

printf("s: %s\n",s); 

これを行う:

printf("s: %s\n",s.c_str()); 
+0

私は、問題はその行に沿ったものだったと感じていました。それをクリアしていただきありがとうございます! – McFizz

関連する問題