我目前有以下代码
char my_stream[800];
std::string my_string;
iResult = recv(clntSocket,my_stream,sizeof(my_stream),0);
my_string = std::string(my_stream);
现在,当我尝试将 char 数组转换为字符串时,我得到了字符串中奇怪字符的存在,任何关于我可能做错的建议
我目前有以下代码
char my_stream[800];
std::string my_string;
iResult = recv(clntSocket,my_stream,sizeof(my_stream),0);
my_string = std::string(my_stream);
现在,当我尝试将 char 数组转换为字符串时,我得到了字符串中奇怪字符的存在,任何关于我可能做错的建议
你得到奇怪的字符,因为你的字符串长度不等于收到的字节数。
您应该像这样初始化字符串:
char* buffer = new char[512];
ssize_t bytesRead = recv(clntSocket,buffer,512,0);
std::string msgStr = std::string(buffer,bytesRead);
delete buffer;
最常见的解决方案是在读取任何内容之前将缓冲区的每个字节归零。
char buffer[512];
buffer = { 0 };
如果您正在从套接字读取以零结尾的字符串,则无需进行转换,它已经是一个 char 字符串。如果它还不是零终止的,那么您将需要某种其他类型的终止符,因为套接字是流(假设这是 TCP)。换句话说,你不需要my_string = std::string(my_stream);
您是否尝试过直接打印 my_stream 而不转换为字符串。根据我的说法,发送和接收的数据格式可能不匹配。另一端的数据可能是其他格式,如 Unicode,如果只有部分字符串是奇怪的字符,那么您可能会尝试将其打印为单字节数组,而不是与 my_stream 末尾的空终止符相关的错误 缺失 tehn 增加my_stream 数组的大小。