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;
}
}
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.
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.
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.
if( sName == Student.name ) is comparing the addresses
if( strcmp( sName, Student.name ) == 0 {
/ * the strings are the same */
}
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;
}