为啥这两个 char 数组不相等?

Posted

技术标签:

【中文标题】为啥这两个 char 数组不相等?【英文标题】:Why are these two char arrays not equal?为什么这两个 char 数组不相等? 【发布时间】:2019-02-15 02:20:48 【问题描述】:

我有这两个在控制台 (DESKTOP-KDOD9T) 上输出相同值的 char 数组,一个从文件中读取,另一个通过 winsock gethostname 接收。比较起来,虽然不一样。它说您无法访问该程序。

#include "pch.h"
#define _WINSOCK_DEPRECATED_NO_WARNINGS

#include <iostream>
#include <string>
#include <fstream>
#include <WinSock2.h>
#pragma comment( lib, "Ws2_32.lib" )

int main()

    char word[255];
    std::fstream stream;
    stream.open("Text.txt");
    stream >> word;
    std::cout << word << "\n";

    WSADATA wsa_Data;
    WSAStartup(0x101, &wsa_Data);

    char buffer[255];
    gethostname(buffer, 255);
    std::cout << buffer << std::endl;

    WSACleanup();

    if (word == buffer)
    
        std::cout << "Welcome!\n";

        for (int i = 0; i < 3; ++i)
        
            std::cout << ".";
                Sleep(300);
        
        std::cout << std::endl;
    
    else
    
        std::cout << "You can't access this program from that PC!\n";
        Sleep(200);
        exit(1);
    

    getchar();

    return 0;

【问题讨论】:

使用strcmp比较字符串,而不是指针相等性。 或者使用std::string而不是char[]数组。 当您使用 C++ 时,您应该使用 std::string 而不是原始字符数组。 【参考方案1】:

数组没有可以比较的值。它们包含多个值。

当您比较两个数组时,数组会衰减为指针,您正在比较指针以查看它们是否指向同一个对象。当然,他们没有。

如果要比较每个字节,可以使用memcmp 之类的函数。如果要比较两个字符串,可以使用strcmp之类的函数。

【讨论】:

“事物”足够模糊,可以说它们确实指向同一事物。说“他们不指向同一个地点”会更清楚(存储的地址不同)。

以上是关于为啥这两个 char 数组不相等?的主要内容,如果未能解决你的问题,请参考以下文章

如何判断两个数组是否相等?

检查两个数组之间的相等性[重复]

比较两个 char* 是不是相等[重复]

java如何判断两个二维对象数组相等,让后打印一句话。

为啥我用可序列化保存后两个对象不相等

两个一维数组如何判断是相等的?