char数组到字符串的转换会产生奇怪的字符-套接字

char Array to string conversion results in strange characters - sockets

本文关键字:字符 套接字 数组 字符串 转换 char      更新时间:2023-10-16

我目前有以下代码

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,您可能正在尝试将其打印为单字节数组如果字符串中只有一部分是奇怪的字符,那么它肯定是与mystream末尾的null终止符有关的错误。缺少tehn会增加mystream数组的大小。