Почему эти два массива не равны? - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть эти два массива символов, которые выводят одно и то же значение на консоль (DESKTOP-KDOD9T), один из них читается из файла, а другой принимается через 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;
}

1 Ответ

0 голосов
/ 15 февраля 2019

Массивы не имеют значений, которые вы можете сравнить.Они содержат несколько значений.

Когда вы сравниваете два массива, массивы распадаются на указатели, и вы сравниваете указатели, чтобы увидеть, указывают ли они на один и тот же объект.Конечно, это не так.

Если вы хотите сравнить каждый байт, вы можете использовать такую ​​функцию, как memcmp.Если вы хотите сравнить две строки, вы можете использовать функцию вроде strcmp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...