2012-03-15 42 views
0

這裏是比較s2和s1的代碼,如果它們相同,它返回0和其他一些選項,但while循環不能結束,我找不到它的問題,我知道如果我將char * s2轉換爲const char * s2,它會正常工作。char *和while循環不能與eachother

#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

爲什麼不使用'strcmp'這是標準的,相當於你的'cmp'?而'std :: string'也有'compare'... – 2012-03-15 18:17:03

+1

你在使用's1'和's2'之前將它們初始化爲一個合理的值。 – 2012-03-15 18:18:40

+5

這可能是我在SO和C++代碼中看到的最常見的錯誤。不幸的是,如果你不知道問題是什麼,很難搜索。 – 2012-03-15 18:18:54

回答

4

考慮:

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

多大s1?問題是你的char指針不指向任何內存塊。您需要使用new分配內存。

5

你有未定義行爲。您沒有分配任何空間來存儲字符串(您沒有初始化s1s2指向任何內存)。

我建議改用std::string;它管理自己的內存問題。

1

如上面所說的Oli和karlphillip,你的代碼必須爲字符串分配內存。

而且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; 
} 

因爲,你cmp功能將return 0,只要您str1和更大長度STR2賽車,並且str1是相同的STR2高達STR2的長度。