比较 C 中 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;
    }
}

原文由 yrazlik 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 940
2 个回答

假设 student::namechar 数组或指向 char 的指针,则以下表达式

sName==Student.name

比较指向 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

这适用于任何长度的名称,并且省去了处理数组的麻烦。

原文由 juanchopanza 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用 c 风格的 strcmp 函数比较应该是字符串的 char 数组。

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

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

原文由 nvoigt 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题