Comparing the values of char arrays in C++

2019-04-27 00:57发布

I have problem about doing something in my program. I have a char[28] array keeping names of people. I have another char[28] array that also keeps names. I ask user to enter a name for the first array, and second arrays reads names from a binary file. Then i compare them with == operator, But even though the names are the same, their values look different when i debug it. Why is this the case? How can i compare these two? My sample code is as follows:

int main()
{
    char sName[28];
    cin>>sName;      //Get the name of the student to be searched

      /// Reading the tables

    ifstream in("students.bin", ios::in | ios::binary);

    student Student; //This is a struct

    while (in.read((char*) &Student, sizeof(student)))
    {
    if(sName==Student.name)//Student.name is also a char[28]
    {
                cout<<"found"<<endl;
        break;
    }
}

标签: c++ arrays char
5条回答
老娘就宠你
2楼-- · 2019-04-27 01:18

You can compare char arrays that are supposed to be strings by using the c style strcmp function.

if( strcmp(sName,Student.name) == 0 ) // strings are equal

In C++ you normally don't work with arrays directly. Use the std::string class instead of character arrays and your comparison with == will work as expected.

查看更多
我欲成王,谁敢阻挡
3楼-- · 2019-04-27 01:18

You can write code for your own char array compare function. Let's start

//Return 0 if not same other wise 1
int compare(char a[],char b[]){
    for(int i=0;a[i]!='\0';i++){
        if(a[i]!=b[i])
            return 0;
    }
    return 1;
}
查看更多
可以哭但决不认输i
4楼-- · 2019-04-27 01:23

if( sName == Student.name ) is comparing the addresses

if( strcmp( sName, Student.name ) == 0 { 
  / * the strings are the same */
}
查看更多
仙女界的扛把子
5楼-- · 2019-04-27 01:29

Assuming student::name is a char array or a pointer to char, the following expression

sName==Student.name

compares pointers to char, after decaying sName from char[28] to char*.

Given that you want to compare the strings container in these arrays, a simple option is to read the names into std::string and use bool operator==:

#include <string> // for std::string

std::string sName;
....

if (sName==Student.name)//Student.name is also an std::string

This will work for names of any length, and saves you the trouble of dealing with arrays.

查看更多
家丑人穷心不美
6楼-- · 2019-04-27 01:40

The problem is in if(sName==Student.name) which basically compare the address of the arrays, not their values.
Replace it with (strcmp(sName, Student.name) == 0)

But in general, you are working on C++, not C, I should advice working with std::string which will make this much simpler.

查看更多
登录 后发表回答