2017-11-08 58 views
0

whileLTestStr.exeで0x008F1D0Dでスローされた例外:0xC0000005:0x00770000のアクセス違反を書き込むアクセス違反。例外がスローされました:アクセス違反の書き込み

このエラーは、あるアレイの1文字を別の配列に配置しようとしたときに発生します。

文字列を入力した直後にエラーが発生し、プログラムを終了せず、単に「一時停止」します。

#include "stdafx.h" 
#include <iostream> 
#include <cstring> 

int main() 
{ 
    using namespace std; 

    char test[20]; 
    char result[20]; 
    int i = 0; 

    cout << "Enter a string without symbolic characters: "; 
    cin.get(test, 20); 

    for (i; (test[i] != '?' || test[i] != '\0'); i++) 
    { 
     result[i] = test[i]; //Exception gets thrown here 
    } 

    if (strcmp(result, test) != 0) 
    { 
     cout << "Fail."; 
    } 
    else 
    { 
     cout << result << endl; 
     cout << "Success."; 
    } 

    return 0; 
} 

ここでは、例外がスローされた箇所をコメントで示しています。

このプログラムは、ユーザが入力できるものだけをテストするためのものです。しかし、なぜこれがうまくいかないのか分かりません。

などがあり、私のためにこれを行うには、いくつかの機能は、おそらくですが、私は、ループで何ができるか、私はまだ言語を学んでいる、と私はしようとテストにだけ興味

EDIT

提案の後、私はAND演算子のOR演算子を変更しましたが、エラーは発生しなくなりました。しかし、私は本当に奇妙な行動を取る。

PICTURE

+0

これはC++で、std :: stringを使用します。 –

+0

@ manni66文字列の各文字を見て、ここでやったことをどうやって行うのか知っている言語にはまだ達していませんが、私はあなたのポイントを得ます –

+0

文字列の各文字を正確にあなたはそれを行う。そして文字列はsize()を持っているので、forループでそれを使うことができます。 –

答えて

3

test[i] != '?' || test[i] != '\0'常にtrueあるので、あなたはあまりにも遠くi++単位として、配列の境界を超えて実行してしまいます。

代わりに||の代わりに&&を使用しますか?

最後に、明示的なNULターミネータをresultに挿入する必要があります。そうでない場合、出力は定義されません。それを行うための簡単な方法は、あなたがのstd ::文字列でそれを行うことができる方法だ

char result[20] = {}; 
+0

これはおそらくエラーの原因でした。はい、ありがとうございます。しかし、私がこれをしたときに本当に奇妙なことが起こった場合は、更新された質問 –

+0

を見てくださいまた、(そして間違いなくもっと重要なのは)両方のバッファが20文字長であることを事前に知っているときは、条件も同様です。どんな文字が入力されたとしても、単に「i」をインクリメントし続けるだけではありません。 – Joe

0
#include <iostream> 
#include <string> 
#include <algorithm> 

int main() 
{ 
    using namespace std; 

    string test; 

    cout << "Enter a string without symbolic characters: "; 
    getline(cin, test); 

    if (test.find("?") != string::npos) 
    { 
     cout << "Fail."; 
    } 
    else 
    { 
     cout << test << endl; 
     cout << "Success."; 
    } 
} 

を使用して\0の配列に配列を初期化することです。 C言語ではなくC言語を学んでください。

+0

私はかなり新しく、テキストブックに従っているので、私はチャーでそれをやる方法を辿っていて、少し先を見ていました。しかし、これは役に立ちました。ありがとう –

関連する問題