为啥这两个 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 数组不相等?的主要内容,如果未能解决你的问题,请参考以下文章