2012-03-15 12 views
0

s2とs1を比較するコードは同じですが、0とその他のオプションを返しますが、whileループは終了できません。問題は見つかりません私がchar * s2をconst char * s2に変換すると、うまく動作します。Char *とWhileループは互いに作用しません

#include <iostream> 
using namespace std; 
int cmp(char*,char*); 
int main() 
{ 
    char* s1; 
    cout << "Please Enter First Word: "; cin >> s1; 
    char* s2; 
    cout << "Please Enter Second Word: "; cin >> s2; 
    cout << "The Result is: " << cmp(s1,s2) << endl; 
     return 0; 
} 

int cmp(char* s1, char* s2) 
{ 
    int i=0; 
    while (*(s2+i)!=0) 
    { 
     if (*(s2+i)>*(s1+i)) return 1; 
     if (*(s2+i)<*(s1+i)) return -1; 
     i++; 
    } 
    return 0; 
} 
+2

標準で、あなたの 'cmp'に相当する' strcmp'を使わないのはなぜですか?そして 'std :: string'も' compare'を持っています... –

+1

あなたは感知可能な値に初期化する前に 's1'と' s2'を使います。 –

+5

これはおそらく私がCとC++コードで見ている最も一般的な間違いです。残念ながら、問題の内容がわからない場合は、検索するのは難しいです。 –

答えて

4

は考えてみましょう:

char* s1; 
cout << "Please Enter First Word: "; cin >> s1; 

s1はどのくらいいるのですか?問題は、あなたのcharポインタがメモリブロックを指していないことです。 newでメモリを割り当てる必要があります。

5

あなたは未定義の動作を持っています。文字列を格納するスペースを割り当てていません(s1またはs2を任意のメモリに初期化していません)。

代わりにstd::stringを使用することをおすすめします。独自のメモリ問題を管理します。

1

Oliとkarlphillipで述べたように、コードでは文字列にメモリを割り当てる必要があります。あなたのcmp機能がreturn 0あなたstr1がstr2のとstr1がstr2の長さの点で最大STR2と同じであることの長さの方が大きいときはいつでも、ので

そしてcompare機能は

int cmp(char* s1, char* s2) 
{ 
    int i=0; 

    while (*(s1+i)!=0 & *(s2+i)!=0) 
    { 
     if (*(s2+i)>*(s1+i)) return 1; 
     if (*(s2+i)<*(s1+i)) return -1; 
     i++; 
    } 
    if(*(s1+i)==0 & *(s2+i)==0) 
    return 0; 
    else if (*(s1+i)!=0) 
    return -1; 
    else 
    return 1; 
} 

....のようにすることができます。

関連する問題