2012-03-15 9 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

왜'strcmp'를 표준으로 사용하고'cmp'와 동등하지 않습니까? 그리고'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에 따르면 코드는 문자열에 메모리를 할당해야합니다.

그리고 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 동일합니다.

관련 문제