比较C++中char数组的值

yra*_*lik 9 c++ arrays char

在我的程序中做某事我有问题.我有一个char [28]数组保存人名.我有另一个char [28]数组,也保留了名称.我要求用户输入第一个数组的名称,第二个数组从二进制文件中读取名称.然后我将它们与==运算符进行比较,但即使名称相同,当我调试它们时它们的值看起来也不同.为什么会这样?我如何比较这两个?我的示例代码如下:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

nvo*_*igt 14

您可以使用c样式strcmp函数比较应该是字符串的char数组.

if( strcmp(sName,Student.name) == 0 ) // strings are equal
Run Code Online (Sandbox Code Playgroud)

在C++中,您通常不直接使用数组.使用std :: string类而不是字符数组,与==的比较将按预期工作.


jua*_*nza 7

假设student::name是一个char数组或指向char,下面的表达式

sName==Student.name
Run Code Online (Sandbox Code Playgroud)

比较指针char,腐烂后sNamechar[28]char*.

鉴于您要比较这些数组中的字符串容器,一个简单的选项是读取名称std::string并使用bool operator==:

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

std::string sName;
....

if (sName==Student.name)//Student.name is also an std::string
Run Code Online (Sandbox Code Playgroud)

这适用于任何长度的名称,并为您节省处理数组的麻烦.


pah*_*ton 6

if( sName == Student.name ) 正在比较地址

if( strcmp( sName, Student.name ) == 0 { 
  / * the strings are the same */
}
Run Code Online (Sandbox Code Playgroud)

不过要小心 strcmp


Roe*_*rel 5

问题在于if(sName==Student.name)它基本上比较了数组的地址,而不是它们的值。
将其替换为(strcmp(sName, Student.name) == 0)

但总的来说,您正在使用 C++,而不是 C,我建议使用 std::string ,这将使这更简单。