Char *和While循环不能相互协作

时间:2012-03-15 18:15:20

标签: c++

下面是将s2与s1进行比较的代码,如果它们相同则会返回0和其他一些选项,但是虽然循环不能终止并且我找不到它的问题,但我唯一知道的是我转换了char * s2进入const char * s2它会正常工作。

#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;
}

3 个答案:

答案 0 :(得分:5)

您有未定义的行为。您没有分配任何空间来存储字符串(您没有初始化s1s2指向任何内存)。

我建议改用std::string;它管理自己的内存问题。

答案 1 :(得分:4)

考虑:

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

s1有多大?问题是你的char指针没有指向任何内存块。您需要使用new分配内存。

答案 2 :(得分: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;
} 

因为,只要str1的长度大于str2和str1与str2的长度相同,cmp函数将return 0 {{1}}。