Почему эти два массива символов не равны?

У меня есть эти два массива символов, которые выводят одно и то же значение на консоль (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;
}

Используйте strcmp для сравнения строк, а не для равенства указателей.

Dai 15.02.2019 03:22

Или используйте std::string вместо char[] массивов.

Remy Lebeau 15.02.2019 03:23

Поскольку вы используете C++, вы должны использовать std::string вместо необработанных массивов символов.

Dai 15.02.2019 03:23
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
234
1

Ответы 1

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

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

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

«Вещь» достаточно двусмысленна, так что, возможно, они указывают на одно и то же. Было бы понятнее сказать «Они не указывают на один и тот же место» (сохраненные адреса разные).

Ben Voigt 15.02.2019 04:00

Другие вопросы по теме