У меня есть эти два массива символов, которые выводят одно и то же значение на консоль (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;
}
Или используйте std::string вместо char[] массивов.
Поскольку вы используете C++, вы должны использовать std::string вместо необработанных массивов символов.





У массивов нет значений, которые можно сравнивать. Они содержат несколько значений.
Когда вы сравниваете два массива, массивы распадаются на указатели, и вы сравниваете указатели, чтобы увидеть, указывают ли они на один и тот же объект. Конечно, нет.
Если вы хотите сравнить каждый байт, вы можете использовать такую функцию, как memcmp. Если вы хотите сравнить две строки, вы можете использовать такую функцию, как strcmp.
«Вещь» достаточно двусмысленна, так что, возможно, они указывают на одно и то же. Было бы понятнее сказать «Они не указывают на один и тот же место» (сохраненные адреса разные).
Используйте
strcmpдля сравнения строк, а не для равенства указателей.